Skip to content

Commit

Permalink
chore: Remove JCreateNull() and JAddNullToObject()
Browse files Browse the repository at this point in the history
    These APIs lead to undefined behavior, and their
    inclusion into the original API was an oversight.
  • Loading branch information
zfields committed Jun 19, 2024
1 parent 1b6c8c8 commit afd41f3
Show file tree
Hide file tree
Showing 6 changed files with 195 additions and 128 deletions.
24 changes: 0 additions & 24 deletions n_cjson.c
Original file line number Diff line number Diff line change
Expand Up @@ -1868,20 +1868,6 @@ N_CJSON_PUBLIC(void) JAddItemReferenceToObject(J *object, const char *string, J
add_item_to_object(object, string, create_reference(item), false);
}

N_CJSON_PUBLIC(J*) JAddNullToObject(J * const object, const char * const name)
{
if (object == NULL) {
return NULL;
}
J *null = JCreateNull();
if (add_item_to_object(object, name, null, false)) {
return null;
}

JDelete(null);
return NULL;
}

N_CJSON_PUBLIC(J*) JAddTrueToObject(J * const object, const char * const name)
{
if (object == NULL) {
Expand Down Expand Up @@ -2250,16 +2236,6 @@ N_CJSON_PUBLIC(void) JReplaceItemInObjectCaseSensitive(J *object, const char *st
replace_item_in_object(object, string, newitem, true);
}

/* Create basic types: */
N_CJSON_PUBLIC(J *) JCreateNull(void)
{
J *item = JNew_Item();
if(item) {
item->type = JNULL;
}
return item;
}

N_CJSON_PUBLIC(J *) JCreateTrue(void)
{
J *item = JNew_Item();
Expand Down
2 changes: 0 additions & 2 deletions n_cjson.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,6 @@ N_CJSON_PUBLIC(Jbool) JIsObject(const J * const item);
N_CJSON_PUBLIC(Jbool) JIsRaw(const J * const item);

/* These calls create a J item of the appropriate type. */
N_CJSON_PUBLIC(J *) JCreateNull(void);
N_CJSON_PUBLIC(J *) JCreateTrue(void);
N_CJSON_PUBLIC(J *) JCreateFalse(void);
N_CJSON_PUBLIC(J *) JCreateBool(Jbool boolean);
Expand Down Expand Up @@ -299,7 +298,6 @@ N_CJSON_PUBLIC(void) JMinify(char *json);

/* Helper functions for creating and adding items to an object at the same time.
* They return the added item or NULL on failure. */
N_CJSON_PUBLIC(J*) JAddNullToObject(J * const object, const char * const name);
N_CJSON_PUBLIC(J*) JAddTrueToObject(J * const object, const char * const name);
N_CJSON_PUBLIC(J*) JAddFalseToObject(J * const object, const char * const name);
N_CJSON_PUBLIC(J*) JAddBoolToObject(J * const object, const char * const name, const Jbool boolean);
Expand Down
183 changes: 92 additions & 91 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,100 +56,42 @@ macro(add_test TEST_NAME)
catch_discover_tests(${TEST_NAME})
endmacro(add_test)

add_test(NoteTransaction_test)
add_test(NoteRequest_test)
add_test(NoteRequestResponse_test)
add_test(NoteRequestResponseWithRetry_test)
add_test(NoteRequestResponseJSON_test)
add_test(NoteRequestWithRetry_test)
add_test(NoteReset_test)
add_test(NoteGetEnv_test)
add_test(NotePayload_test)
add_test(i2cNoteTransaction_test)
add_test(crcAdd_test)
add_test(crcError_test)
add_test(i2cChunkedReceive_test)
add_test(i2cChunkedTransmit_test)
add_test(i2cNoteQueryLength_test)
add_test(i2cNoteReset_test)
add_test(serialNoteTransaction_test)
add_test(serialNoteReset_test)
add_test(NoteSetFn_test)
add_test(NoteDebug_test)
add_test(NoteTransactionHooks_test)
add_test(NoteSerialHooks_test)
add_test(NotePrint_test)
add_test(NotePrintln_test)
add_test(NoteTime_test)
add_test(NoteRegion_test)
add_test(NoteLocationValid_test)
add_test(NoteIsConnected_test)
add_test(NoteGetNetStatus_test)
add_test(NoteGetVersion_test)
add_test(NoteGetLocation_test)
add_test(NoteSetLocation_test)
add_test(NoteClearLocation_test)
add_test(NoteGetLocationMode_test)
add_test(NoteSetLocationMode_test)
add_test(NoteGetServiceConfig_test)
add_test(NoteGetStatus_test)
add_test(NoteSleep_test)
add_test(NoteNewRequest_test)
add_test(NoteNewCommand_test)
add_test(NoteErrorClean_test)
add_test(NoteSetFnMutex_test)
add_test(NoteSetFnI2CMutex_test)
add_test(NoteSetFnNoteMutex_test)
add_test(NoteSetFnSerial_test)
add_test(NoteSetFnI2C_test)
add_test(JIsPresent_test)
add_test(JGetString_test)
add_test(JGetArray_test)
add_test(JGetObject_test)
add_test(i2cNoteTransaction_test)
add_test(JAddBinaryToObject_test)
add_test(JAllocString_test)
add_test(JAtoI_test)
add_test(JAtoN_test)
add_test(JBaseItemType_test)
add_test(JBoolValue_test)
add_test(JStringValue_test)
add_test(JNumberValue_test)
add_test(JContainsString_test)
add_test(JGetArray_test)
add_test(JGetBinaryFromObject_test)
add_test(JGetBool_test)
add_test(JGetInt_test)
add_test(JGetItemName_test)
add_test(JGetNumber_test)
add_test(JGetObject_test)
add_test(JGetString_test)
add_test(JGetType_test)
add_test(JIntValue_test)
add_test(JGetInt_test)
add_test(JGetBool_test)
add_test(JIsNullString_test)
add_test(JIsExactString_test)
add_test(JContainsString_test)
add_test(JAddBinaryToObject_test)
add_test(JGetBinaryFromObject_test)
add_test(JIsNullString_test)
add_test(JIsPresent_test)
add_test(JItoA_test)
add_test(JAtoI_test)
add_test(JGetItemName_test)
add_test(JAllocString_test)
add_test(JNtoA_test)
add_test(JNumberValue_test)
add_test(JPrintUnformatted_test)
add_test(JSON_number_handling_test)
add_test(JStringValue_test)
add_test(Jtolower_test)
add_test(JType_test)
add_test(JGetType_test)
add_test(NotePrintf_test)
add_test(NoteDebugf_test)
add_test(NoteSetEnvDefault_test)
add_test(NoteSetEnvDefaultNumber_test)
add_test(NoteGetEnvNumber_test)
add_test(NotePayloadSaveAndSleep_test)
add_test(NoteWake_test)
add_test(NotePayloadRetrieveAfterSleep_test)
add_test(NoteUserAgent_test)
add_test(NoteFactoryReset_test)
add_test(NoteSetProductID_test)
add_test(NoteSetSerialNumber_test)
add_test(NoteSetUploadMode_test)
add_test(NoteSetSyncMode_test)
add_test(NoteTemplate_test)
add_test(NoteTimeSet_test)
add_test(NoteLocalTimeST_test)
add_test(NoteAdd_test)
add_test(NoteSendToRoute_test)
add_test(NoteGetVoltage_test)
add_test(NoteGetTemperature_test)
add_test(NoteGetContact_test)
add_test(NoteSetContact_test)
add_test(NoteDebugSyncStatus_test)
add_test(crcAdd_test)
add_test(crcError_test)
add_test(serialChunkedReceive_test)
add_test(serialChunkedTransmit_test)
add_test(i2cNoteQueryLength_test)
add_test(i2cChunkedReceive_test)
add_test(i2cChunkedTransmit_test)
add_test(NoteBinaryCodecDecode_test)
add_test(NoteBinaryCodecEncode_test)
add_test(NoteBinaryCodecMaxDecodedLength_test)
Expand All @@ -159,12 +101,71 @@ add_test(NoteBinaryStoreEncodedLength_test)
add_test(NoteBinaryStoreReceive_test)
add_test(NoteBinaryStoreReset_test)
add_test(NoteBinaryStoreTransmit_test)
add_test(JPrintUnformatted_test)
add_test(Jtolower_test)
add_test(JSON_number_handling_test)
add_test(JAtoN_test)
add_test(JNtoA_test)
add_test(NoteClearLocation_test)
add_test(NoteDebug_test)
add_test(NoteDebugf_test)
add_test(NoteDebugSyncStatus_test)
add_test(NoteErrorClean_test)
add_test(NoteFactoryReset_test)
add_test(NoteGetContact_test)
add_test(NoteGetEnv_test)
add_test(NoteGetEnvNumber_test)
add_test(NoteGetLocation_test)
add_test(NoteGetLocationMode_test)
add_test(NoteGetNetStatus_test)
add_test(NoteGetServiceConfig_test)
add_test(NoteGetStatus_test)
add_test(NoteGetTemperature_test)
add_test(NoteGetVersion_test)
add_test(NoteGetVoltage_test)
add_test(NoteIsConnected_test)
add_test(NoteLocalTimeST_test)
add_test(NoteLocationValid_test)
add_test(NoteNewCommand_test)
add_test(NoteNewRequest_test)
add_test(NotePayload_test)
add_test(NotePayloadRetrieveAfterSleep_test)
add_test(NotePayloadSaveAndSleep_test)
add_test(NotePrint_test)
add_test(NotePrintf_test)
add_test(NotePrintln_test)
add_test(NoteRegion_test)
add_test(NoteRequest_test)
add_test(NoteRequestResponse_test)
add_test(NoteRequestResponseJSON_test)
add_test(NoteRequestResponseWithRetry_test)
add_test(NoteRequestWithRetry_test)
add_test(NoteReset_test)
add_test(NoteResponseError_test)
add_test(NoteSendToRoute_test)
add_test(NoteSerialHooks_test)
add_test(NoteSetContact_test)
add_test(NoteSetEnvDefault_test)
add_test(NoteSetEnvDefaultNumber_test)
add_test(NoteSetFn_test)
add_test(NoteSetFnI2C_test)
add_test(NoteSetFnI2CMutex_test)
add_test(NoteSetFnMutex_test)
add_test(NoteSetFnNoteMutex_test)
add_test(NoteSetFnSerial_test)
add_test(NoteSetLocation_test)
add_test(NoteSetLocationMode_test)
add_test(NoteSetProductID_test)
add_test(NoteSetSerialNumber_test)
add_test(NoteSetSyncMode_test)
add_test(NoteSetUploadMode_test)
add_test(NoteSleep_test)
add_test(NoteTemplate_test)
add_test(NoteTime_test)
add_test(NoteTimeSet_test)
add_test(NoteTransaction_test)
add_test(NoteTransactionHooks_test)
add_test(NoteUserAgent_test)
add_test(NoteWake_test)
add_test(serialChunkedReceive_test)
add_test(serialChunkedTransmit_test)
add_test(serialNoteReset_test)
add_test(serialNoteTransaction_test)

if(NOTE_C_COVERAGE)
find_program(LCOV lcov REQUIRED)
Expand Down
103 changes: 103 additions & 0 deletions test/src/JBaseItemType_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
/*!
* @file JBaseItemType_test.cpp
*
* Written by the Blues Inc. team.
*
* Copyright (c) 2023 Blues Inc. MIT License. Use of this source code is
* governed by licenses granted by the copyright holder including that found in
* the
* <a href="https://github.com/blues/note-c/blob/master/LICENSE">LICENSE</a>
* file.
*
*/

#include <catch2/catch_test_macros.hpp>

#include "n_lib.h"

namespace
{

SCENARIO("JBaseItemType")
{
GIVEN("A BOOL JSON") {
WHEN("The value is JTYPE_BOOL_TRUE") {
THEN("The type is JTYPE_BOOL") {
CHECK(JBaseItemType(JTYPE_BOOL_TRUE) == JTYPE_BOOL);
}
}
WHEN("The value is JTYPE_BOOL_FALSE") {
THEN("The type is JTYPE_BOOL") {
CHECK(JBaseItemType(JTYPE_BOOL_FALSE) == JTYPE_BOOL);
}
}
}

GIVEN("A NUMBER JSON") {
WHEN("The value is JTYPE_NUMBER_ZERO") {
THEN("The type is JTYPE_NUMBER") {
CHECK(JBaseItemType(JTYPE_NUMBER_ZERO) == JTYPE_NUMBER);
}
}
}

GIVEN("A STRING JSON") {
WHEN("The value is JTYPE_STRING_BLANK") {
THEN("The type is JTYPE_STRING") {
CHECK(JBaseItemType(JTYPE_STRING_BLANK) == JTYPE_STRING);
}
}
WHEN("The value is JTYPE_STRING_ZERO") {
THEN("The type is JTYPE_STRING") {
CHECK(JBaseItemType(JTYPE_STRING_ZERO) == JTYPE_STRING);
}
}
WHEN("The value is JTYPE_STRING_NUMBER") {
THEN("The type is JTYPE_STRING") {
CHECK(JBaseItemType(JTYPE_STRING_NUMBER) == JTYPE_STRING);
}
}
WHEN("The value is JTYPE_STRING_BOOL_TRUE") {
THEN("The type is JTYPE_STRING") {
CHECK(JBaseItemType(JTYPE_STRING_BOOL_TRUE) == JTYPE_STRING);
}
}
WHEN("The value is JTYPE_STRING_BOOL_FALSE") {
THEN("The type is JTYPE_STRING") {
CHECK(JBaseItemType(JTYPE_STRING_BOOL_FALSE) == JTYPE_STRING);
}
}
}

GIVEN("A BASE TYPE JSON") {
WHEN("The value is JTYPE_BOOL") {
THEN("The type is JTYPE_BOOL") {
CHECK(JBaseItemType(JTYPE_BOOL) == JTYPE_BOOL);
}
}
WHEN("The value is JTYPE_NUMBER") {
THEN("The type is JTYPE_NUMBER") {
CHECK(JBaseItemType(JTYPE_NUMBER) == JTYPE_NUMBER);
}
}
WHEN("The value is JTYPE_STRING") {
THEN("The type is JTYPE_STRING") {
CHECK(JBaseItemType(JTYPE_STRING) == JTYPE_STRING);
}
}
WHEN("The value is JTYPE_ARRAY") {
THEN("The type is JTYPE_ARRAY") {
CHECK(JBaseItemType(JTYPE_ARRAY) == JTYPE_ARRAY);
}
}
WHEN("The value is JTYPE_OBJECT") {
THEN("The type is JTYPE_OBJECT") {
CHECK(JBaseItemType(JTYPE_OBJECT) == JTYPE_OBJECT);
}
}
}
}

}


7 changes: 0 additions & 7 deletions test/src/JGetType_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
*
*/



#include <catch2/catch_test_macros.hpp>

#include "n_lib.h"
Expand Down Expand Up @@ -49,11 +47,6 @@ SCENARIO("JGetType")
CHECK(JGetType(json, field) == JTYPE_BOOL_FALSE);
}

SECTION("JNull") {
JAddNullToObject(json, field);
CHECK(JGetType(json, field) == JTYPE_NULL);
}

SECTION("JNumber") {
SECTION("Zero") {
JAddNumberToObject(json, field, 0);
Expand Down
Loading

0 comments on commit afd41f3

Please sign in to comment.