61 lines
1.8 KiB
C
61 lines
1.8 KiB
C
#include <dart_api.h>
|
|
#include <libinjection.h>
|
|
#include <libinjection_sqli.h>
|
|
#include <stdbool.h>
|
|
#include <string.h>
|
|
|
|
Dart_NativeFunction ResolveName(Dart_Handle name, int argc,
|
|
bool *auto_setup_scope);
|
|
|
|
DART_EXPORT Dart_Handle angel_security_native_Init(Dart_Handle parent_library) {
|
|
if (Dart_IsError(parent_library))
|
|
return parent_library;
|
|
|
|
Dart_Handle result_code =
|
|
Dart_SetNativeResolver(parent_library, ResolveName, NULL);
|
|
if (Dart_IsError(result_code))
|
|
return result_code;
|
|
|
|
return Dart_Null();
|
|
}
|
|
|
|
Dart_Handle HandleError(Dart_Handle handle) {
|
|
if (Dart_IsError(handle))
|
|
Dart_PropagateError(handle);
|
|
return handle;
|
|
}
|
|
|
|
void Angel_Security_IsSqli(Dart_NativeArguments arguments) {
|
|
const char *text;
|
|
Dart_Handle textHandle = Dart_GetNativeArgument(arguments, 0);
|
|
HandleError(Dart_StringToCString(textHandle, &text));
|
|
|
|
struct libinjection_sqli_state state;
|
|
libinjection_sqli_init(&state, text, strlen(text), FLAG_NONE);
|
|
int is_sqli = libinjection_is_sqli(&state);
|
|
|
|
// Return list
|
|
Dart_Handle outHandle = Dart_NewList(2);
|
|
if (is_sqli != 0) {
|
|
HandleError(Dart_ListSetAt(outHandle, 0, Dart_NewBoolean(true)));
|
|
HandleError(Dart_ListSetAt(outHandle, 1,
|
|
Dart_NewStringFromCString(state.fingerprint)));
|
|
} else {
|
|
HandleError(Dart_ListSetAt(outHandle, 0, Dart_NewBoolean(false)));
|
|
HandleError(Dart_ListSetAt(outHandle, 1, Dart_Null()));
|
|
}
|
|
Dart_SetReturnValue(arguments, outHandle);
|
|
}
|
|
|
|
Dart_NativeFunction ResolveName(Dart_Handle name, int argc,
|
|
bool *auto_setup_scope) {
|
|
if (!Dart_IsString(name))
|
|
return NULL;
|
|
Dart_NativeFunction result = NULL;
|
|
const char *cname;
|
|
HandleError(Dart_StringToCString(name, &cname));
|
|
|
|
if (strcmp("Angel_Security_IsSqli", cname) == 0)
|
|
result = Angel_Security_IsSqli;
|
|
return result;
|
|
}
|