]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
json: Fix typo... Don't mis-cast integers
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 11 Feb 2023 03:00:15 +0000 (21:00 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 11 Feb 2023 03:00:33 +0000 (21:00 -0600)
src/lib/json/json.c
src/tests/modules/json/regression02.unlang [new file with mode: 0644]

index dee76bdf71533a0467ce7615f0dcd0a2ff41cbe1..2f39d37bc4fbc0f8ca9e265985445b1ad6c825f1 100644 (file)
@@ -156,9 +156,9 @@ int fr_json_object_to_value_box(TALLOC_CTX *ctx, fr_value_box_t *out, json_objec
                } else if (num > UINT16_MAX) {          /* 32bit unsigned */
                        fr_value_box(out, (uint32_t)num, tainted);
                } else if (num > UINT8_MAX) {           /* 16bit unsigned */
-                       fr_value_box(out, (int16_t)num, tainted);
+                       fr_value_box(out, (uint16_t)num, tainted);
                } else {                                /* 8bit unsigned */
-                       fr_value_box(out, (int8_t)num, tainted);
+                       fr_value_box(out, (uint8_t)num, tainted);
                }
        }
                break;
diff --git a/src/tests/modules/json/regression02.unlang b/src/tests/modules/json/regression02.unlang
new file mode 100644 (file)
index 0000000..fb4c990
--- /dev/null
@@ -0,0 +1,28 @@
+# An error string from Azure AD, try and access all the bits
+&Tmp-String-0 := "{\"error\":\"invalid_grant\",\"error_description\":\"AADSTS50126: Error validating credentials due to invalid username or password.\\r\\nTrace ID: 20bb60a5-5504-4a6b-ab40-a353a95c2500\\r\\nCorrelation ID: e58bb567-ad15-4a46-8341-cc6e800dd817\\r\\nTimestamp: 2023-02-11 02:32:40Z\",\"error_codes\":[50126],\"timestamp\":\"2023-02-11 02:32:40Z\",\"trace_id\":\"20bb60a5-5504-4a6b-ab40-a353a95c2500\",\"correlation_id\":\"e58bb567-ad15-4a46-8341-cc6e800dd817\",\"error_uri\":\"https://login.microsoftonline.com/error?code=50126\"}"
+
+map json &Tmp-String-0 {
+       &Tmp-String-0 := '$.error'
+       &Tmp-String-1 := '$.error_description'
+       &Tmp-String-2 := '$.error_uri'
+       &Tmp-Integer-0 := '$.error_codes[0]'
+}
+
+if (&Tmp-String-0 != 'invalid_grant') {
+       test_fail
+}
+
+if (&Tmp-String-1 != "AADSTS50126: Error validating credentials due to invalid username or password.\r\nTrace ID: 20bb60a5-5504-4a6b-ab40-a353a95c2500\r\nCorrelation ID: e58bb567-ad15-4a46-8341-cc6e800dd817\r\nTimestamp: 2023-02-11 02:32:40Z") {
+       test_fail
+}
+
+if (&Tmp-String-2 != 'https://login.microsoftonline.com/error?code=50126') {
+       test_fail
+}
+
+# This was being parsed as a negative integer
+if (&Tmp-Integer-0 != 50126) {
+       test_fail
+}
+
+test_pass