switch (encoder->state) {
case HTMLFORM_URLENCODER_STATE_NAME:
DP_STATE("NAME");
- htmlform_urlencoder_convert(encoder, field->name[encoder->src_pos], str, len);
- encoder->src_pos++;
if (encoder->src_pos == field->name_len) {
encoder->state = HTMLFORM_URLENCODER_STATE_EQUAL;
+ *str = encoder->buf;
+ *len = 0;
+ return True;
}
+ htmlform_urlencoder_convert(encoder, field->name[encoder->src_pos], str, len);
+ encoder->src_pos++;
return True;
case HTMLFORM_URLENCODER_STATE_EQUAL:
DP_STATE("EQUAL");
return True;
case HTMLFORM_URLENCODER_STATE_VALUE:
DP_STATE("VALUE");
- htmlform_urlencoder_convert(encoder, field->value[encoder->src_pos], str, len);
- encoder->src_pos++;
if (encoder->src_pos == field->value_len) {
encoder->state = HTMLFORM_URLENCODER_STATE_AMP;
encoder->field_index++;
+ *str = encoder->buf;
+ *len = 0;
+ return True;
}
+ htmlform_urlencoder_convert(encoder, field->value[encoder->src_pos], str, len);
+ encoder->src_pos++;
return True;
case HTMLFORM_URLENCODER_STATE_AMP:
DP_STATE("AMP");
if (cont == False) {
break;
}
+ if (len == 0) {
+ continue;
+ }
result = realloc(result, result_len + len + 1);
if (result == NULL) {
ret = UNITTEST_RESULT_FAIL;
return test_htmlform_urlencoder_common(&testdata);
}
+LOCAL UNITTEST_RESULT test_htmlform_urlencoder_5()
+{
+ htmlform_field src[] = {
+ (htmlform_field){"aaa", 3, "", 0},
+ (htmlform_field){"cc", 2, "", 0},
+ };
+ W src_len = 2;
+ UB expected[] = "aaa=&cc=";
+ W expected_len = strlen(expected);
+ urlencoder_testdata_t testdata = {
+ src, src_len, expected, expected_len
+ };
+ return test_htmlform_urlencoder_common(&testdata);
+}
+
EXPORT VOID test_htmlform_urlencoder_main(unittest_driver_t *driver)
{
UNITTEST_DRIVER_REGIST(driver, test_htmlform_urlencoder_1);
UNITTEST_DRIVER_REGIST(driver, test_htmlform_urlencoder_2);
UNITTEST_DRIVER_REGIST(driver, test_htmlform_urlencoder_3);
UNITTEST_DRIVER_REGIST(driver, test_htmlform_urlencoder_4);
+ UNITTEST_DRIVER_REGIST(driver, test_htmlform_urlencoder_5);
}