RyanJsonFuzzerModify.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "RyanJsonFuzzer.h"
  2. RyanJsonBool_e RyanJsonFuzzerTestModify(RyanJson_t pJson, uint32_t size)
  3. {
  4. RyanJsonIsNull(pJson);
  5. if (RyanJsonIsKey(pJson))
  6. {
  7. char *key = (char *)malloc(strlen(RyanJsonGetKey(pJson)) + 1);
  8. if (key)
  9. {
  10. memcpy(key, RyanJsonGetKey(pJson), strlen(RyanJsonGetKey(pJson)));
  11. key[strlen(RyanJsonGetKey(pJson))] = 0;
  12. RyanJsonChangeKey(pJson, "key");
  13. RyanJsonChangeKey(pJson, key);
  14. free(key);
  15. }
  16. }
  17. if (RyanJsonIsBool(pJson)) { RyanJsonChangeBoolValue(pJson, !RyanJsonGetBoolValue(pJson)); }
  18. if (RyanJsonIsNumber(pJson))
  19. {
  20. if (RyanJsonIsInt(pJson))
  21. {
  22. int32_t value = RyanJsonGetIntValue(pJson);
  23. RyanJsonChangeIntValue(pJson, (int32_t)size);
  24. RyanJsonChangeIntValue(pJson, value);
  25. }
  26. if (RyanJsonIsDouble(pJson))
  27. {
  28. double value = RyanJsonGetDoubleValue(pJson);
  29. RyanJsonChangeDoubleValue(pJson, size * 1.123456789);
  30. RyanJsonChangeDoubleValue(pJson, value);
  31. }
  32. }
  33. if (RyanJsonIsString(pJson))
  34. {
  35. char *value = (char *)malloc(strlen(RyanJsonGetStringValue(pJson)) + 1);
  36. if (value)
  37. {
  38. memcpy(value, RyanJsonGetStringValue(pJson), strlen(RyanJsonGetStringValue(pJson)));
  39. value[strlen(RyanJsonGetStringValue(pJson))] = 0;
  40. RyanJsonChangeStringValue(pJson, "hello world");
  41. RyanJsonChangeStringValue(pJson, "h");
  42. RyanJsonChangeStringValue(pJson, value);
  43. free(value);
  44. }
  45. }
  46. if (RyanJsonIsArray(pJson) || RyanJsonIsObject(pJson))
  47. {
  48. RyanJson_t item;
  49. RyanJsonArrayForEach(pJson, item)
  50. {
  51. RyanJsonCheckReturnFalse(RyanJsonTrue == RyanJsonFuzzerTestModify(item, size));
  52. }
  53. }
  54. return RyanJsonTrue;
  55. }
  56. RyanJsonBool_e RyanJsonFuzzerVerifyGet(RyanJson_t lastJson, RyanJson_t pJson, uint32_t index, uint32_t size)
  57. {
  58. RyanJsonIsNull(pJson);
  59. RyanJsonAssert(NULL == RyanJsonGetKey(NULL));
  60. RyanJsonAssert(NULL == RyanJsonGetStringValue(NULL));
  61. RyanJsonAssert(0 == RyanJsonGetIntValue(NULL));
  62. RyanJsonAssert(RyanJsonTrue == RyanJsonCompareDouble(RyanJsonGetDoubleValue(NULL), 0.0));
  63. RyanJsonAssert(NULL == RyanJsonGetObjectValue(NULL));
  64. RyanJsonAssert(NULL == RyanJsonGetArrayValue(NULL));
  65. RyanJsonAssert(NULL == RyanJsonGetObjectByKey(NULL, NULL));
  66. RyanJsonAssert(NULL == RyanJsonGetObjectByKey(pJson, NULL));
  67. RyanJsonAssert(NULL == RyanJsonGetObjectByKey(NULL, "NULL"));
  68. RyanJsonAssert(NULL == RyanJsonGetObjectByKeys(NULL, NULL));
  69. RyanJsonAssert(NULL == RyanJsonGetObjectByKeys(pJson, NULL));
  70. RyanJsonAssert(NULL == RyanJsonGetObjectByKeys(NULL, "NULL"));
  71. if (!RyanJsonIsObject(pJson)) // pJson类型错误
  72. {
  73. RyanJsonAssert(NULL == RyanJsonGetObjectByKey(pJson, "NULL"));
  74. }
  75. RyanJsonAssert(NULL == RyanJsonGetObjectByIndex(NULL, 10));
  76. if (!RyanJsonIsArray(pJson) && !RyanJsonIsObject(pJson)) // pJson类型错误
  77. {
  78. RyanJsonAssert(NULL == RyanJsonGetObjectByIndex(pJson, 0));
  79. }
  80. if (RyanJsonIsKey(pJson)) { RyanJsonGetObjectToKey(lastJson, RyanJsonGetKey(pJson)); }
  81. else
  82. {
  83. RyanJsonGetObjectToIndex(lastJson, index);
  84. }
  85. if (RyanJsonIsArray(pJson) || RyanJsonIsObject(pJson))
  86. {
  87. RyanJson_t item;
  88. RyanJsonObjectForEach(pJson, item) { RyanJsonFuzzerVerifyGet(pJson, item, index, size); }
  89. }
  90. return RyanJsonTrue;
  91. }
  92. RyanJsonBool_e RyanJsonFuzzerTestGet(RyanJson_t pJson, uint32_t size)
  93. {
  94. RyanJsonAssert(RyanJsonFalse == RyanJsonIsKey(NULL));
  95. RyanJsonAssert(RyanJsonFalse == RyanJsonIsNull(NULL));
  96. RyanJsonAssert(RyanJsonFalse == RyanJsonIsBool(NULL));
  97. RyanJsonAssert(RyanJsonFalse == RyanJsonIsNumber(NULL));
  98. RyanJsonAssert(RyanJsonFalse == RyanJsonIsString(NULL));
  99. RyanJsonAssert(RyanJsonFalse == RyanJsonIsArray(NULL));
  100. RyanJsonAssert(RyanJsonFalse == RyanJsonIsObject(NULL));
  101. RyanJsonAssert(RyanJsonFalse == RyanJsonIsInt(NULL));
  102. RyanJsonAssert(RyanJsonFalse == RyanJsonIsDouble(NULL));
  103. if (RyanJsonIsArray(pJson) || RyanJsonIsObject(pJson))
  104. {
  105. RyanJson_t item;
  106. uint32_t index = 0;
  107. RyanJsonObjectForEach(pJson, item)
  108. {
  109. RyanJsonFuzzerVerifyGet(pJson, item, index, size);
  110. index++;
  111. }
  112. }
  113. return RyanJsonTrue;
  114. }