json: Allow e+/E+ in exponent as per RFC 8259
diff --git a/src/jplist.c b/src/jplist.c
index 782d2b3..4f30cd0 100644
--- a/src/jplist.c
+++ b/src/jplist.c
@@ -460,6 +460,8 @@
     if (str[0] == '-') {
         is_neg = 1;
         (*endp)++;
+    } else if (str[0] == '+') {
+        (*endp)++;
     }
     if (is_neg) {
         MAX++;
@@ -522,7 +524,7 @@
             } else {
                 val = plist_new_uint((uint64_t)intpart);
             }
-        } else if ((*endp == '.' && endp+1 < str_end && isdigit(*(endp+1))) || ((*endp == 'e' || *endp == 'E') && endp+1 < str_end && (isdigit(*(endp+1)) || ((*(endp+1) == '-') && endp+2 < str_end && isdigit(*(endp+2)))))) {
+        } else if ((*endp == '.' && endp+1 < str_end && isdigit(*(endp+1))) || ((*endp == 'e' || *endp == 'E') && endp+1 < str_end && (isdigit(*(endp+1)) || (((*(endp+1) == '-') || (*(endp+1) == '+')) && endp+2 < str_end && isdigit(*(endp+2)))))) {
             /* floating point */
             double dval = (double)intpart;
             char* fendp = endp;
@@ -546,7 +548,7 @@
                 if (fendp >= str_end) {
                     break;
                 }
-                if (fendp+1 < str_end && (*fendp == 'e' || *fendp == 'E') && (isdigit(*(fendp+1)) || ((*(fendp+1) == '-') && fendp+2 < str_end && isdigit(*(fendp+2))))) {
+                if (fendp+1 < str_end && (*fendp == 'e' || *fendp == 'E') && (isdigit(*(fendp+1)) || (((*(fendp+1) == '-') || (*(fendp+1) == '+')) && fendp+2 < str_end && isdigit(*(fendp+2))))) {
                     int64_t exp = parse_decimal(fendp+1, str_end, &fendp);
                     dval = dval * pow(10, (double)exp);
                 } else {