1
0
mirror of https://github.com/halaxa/json-machine.git synced 2025-03-15 17:09:39 +01:00

Segfault resolved

This commit is contained in:
Filip Halaxa 2023-05-03 14:11:37 +02:00
parent f142eb20cc
commit 2e783a0120

View File

@ -121,25 +121,34 @@ zend_string *zstr_tokenBuffer;
zend_string *zstr_byte;
int myNum;
int i;
i = lastIndex;
printf("line: %d\n", __LINE__);
printf("lastIndex: %ld\n", lastIndex);
printf("i: %d\n", i);
printf("strlen(json): %zu\n", strlen(json));
printf("i < strlen(json): %d\n", i < strlen(json));
printf("for\n");
for (i = lastIndex; i < strlen(json); i++) {
byte = json[i];
//printf("[[%d, %d, \"%s\", %ld]]", inString, escaping, tokenBuffer, lastIndex);
//printf("[[%d, %d, \"%s\", %ld]]\n", inString, escaping, tokenBuffer, lastIndex);
//printf("'%c'\n", byte);
//printf("'%d'\n", i);
//scanf("%d", &myNum);
//printf("if (escaping) {\n");
printf("if (escaping) {\n");
if (escaping) {
escaping = false;
tokenBuffer[strlen(tokenBuffer)] = byte;
continue;
}
//printf("if (insignificantBytes[byte]) {\n");
printf("if (insignificantBytes[byte]) {\n");
if (insignificantBytes[byte]) {
tokenBuffer[strlen(tokenBuffer)] = byte;
continue;
}
//printf("if (inString) {\n");
printf("if (inString) {\n");
if (inString) {
if (byte == '"') {
inString = false;
@ -149,20 +158,20 @@ int myNum;
tokenBuffer[strlen(tokenBuffer)] = byte;
continue;
}
//printf("if (tokenBoundaries[byte]) {\n");
printf("if (tokenBoundaries[byte]) {\n");
if (tokenBoundaries[byte]) {
//printf("if (strlen(tokenBuffer)) {\n");
printf("if (strlen(tokenBuffer)) {\n");
if (strlen(tokenBuffer)) {
printf("%s\n", tokenBuffer);
printf("%s\n", tokenBuffer);
ZVAL_BOOL(zEscaping, false);
ZVAL_BOOL(zInString, false);
ZVAL_STRING(zTokenBuffer, "");
ZVAL_LONG(zLastIndex, i);
//printf("RETURN_STR(zstr_tokenBuffer);\n");
printf("RETURN_STR(zstr_tokenBuffer);\n");
zstr_tokenBuffer = zend_string_init(tokenBuffer, strlen(tokenBuffer), 0);
RETURN_STR(zstr_tokenBuffer);
}
//printf("if (colonCommaBracket[byte]) {\n");
printf("if (colonCommaBracket[byte]) {\n");
if (colonCommaBracket[byte]) {
printf("ZVAL_BOOL(Z_REFVAL_P(zEscaping), false);\n");
ZVAL_BOOL(zEscaping, false);
@ -172,27 +181,25 @@ int myNum;
ZVAL_STRING(zTokenBuffer, "");
printf("ZVAL_LONG(Z_REFVAL_P(zLastIndex), i+1);\n");
ZVAL_LONG(zLastIndex, i+1);
//printf("RETURN_STR((zend_string *) &byte);\n");
printf("RETURN_STR((zend_string *) &byte);\n");
zstr_byte = zend_string_init((char *)&byte, 1, 0);
RETURN_STR(zstr_byte);
}
//printf("} else {\n");
printf("} else {\n");
} else { // else branch matches `"` but also `\` outside of a string literal which is an error anyway but strictly speaking not correctly parsed token
inString = true;
tokenBuffer[strlen(tokenBuffer)] = byte;
}
php_printf("zTokenBuffer: %s\n", Z_STRVAL_P(zTokenBuffer));
php_printf("zEscaping: %s\n", Z_TYPE_P(zEscaping) == IS_TRUE ? "true" : "false");
php_printf("zInString: %s\n", Z_TYPE_P(zInString) == IS_TRUE ? "true" : "false");
php_printf("zLastIndex: %ld\n", Z_LVAL_P(zLastIndex));
}
//printf("ZVAL_STRING(Z_REFVAL_P(zTokenBuffer), tokenBuffer);\n");
ZVAL_STRING(Z_REFVAL_P(zTokenBuffer), tokenBuffer);
ZVAL_BOOL(Z_REFVAL_P(zEscaping), escaping);
ZVAL_BOOL(Z_REFVAL_P(zInString), inString);
ZVAL_LONG(Z_REFVAL_P(zLastIndex), i+1);
printf("line: %d\n", __LINE__);
ZVAL_BOOL(zEscaping, escaping);
printf("ZVAL_BOOL(Z_REFVAL_P(zInString), false);\n");
ZVAL_BOOL(zInString, inString);
printf("ZVAL_STRING(Z_REFVAL_P(zTokenBuffer), "");\n");
ZVAL_STRING(zTokenBuffer, tokenBuffer);
printf("ZVAL_LONG(Z_REFVAL_P(zLastIndex), i+1);\n");
ZVAL_LONG(zLastIndex, 0);
}