]> Cypherpunks repositories - keks.git/commitdiff
Forbid empty map strings
authorSergey Matveev <stargrave@stargrave.org>
Sun, 13 Oct 2024 16:26:19 +0000 (19:26 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 13 Oct 2024 16:27:02 +0000 (19:27 +0300)
cyac/cmd/print.c
cyac/iter.c
gyac/dec.go
pyac/pyac.py
spec/encoding/cont.texi

index 1a8b607d0964f79a13e7124dc022d61a7aeb771ab594b0efcd13647fadfa13e2..930271746432f7f238952f12766c84df362c5f9472d9a1028f02e202d44c39fa 100644 (file)
@@ -246,7 +246,7 @@ main(int argc, char **argv)
     ptrdiff_t off = 0;
     enum YACErr err = YACAtomDecode(&atom, buf, len);
     if (err != YACErrNo) {
-        fprintf(stderr, "map err: %d\n", err);
+        fprintf(stderr, "err: %d\n", err);
         return EXIT_FAILURE;
     }
     off += atom.off;
index 9d810457cbb27c96fea6299af796f834d8478ad48d6719d22f65d54d193be6da..6724aa2d20c3f8a28bb5d1fa0aae57737013f069ec4a915f9d63bfc767244f63 100644 (file)
@@ -77,6 +77,9 @@ YACIterMap(
         if (atom->typ != YACItemStr) {
             return YACErrMapBadKey;
         }
+        if (atom->len == 0) {
+            return YACErrMapBadKey;
+        }
         if (atom->len < keyLen) {
             return YACErrMapUnordered;
         }
index 8f41f715c413fd9eb7d89e0c1a5b87089199c13ffb90c58c6777f3642aaeaac6..5bc7a92fafb489f28eeb9cf62b7d92749c2dd7fa821384e0c8e199ddc66ed0dd 100644 (file)
@@ -334,6 +334,10 @@ func DecodeItem(buf []byte) (item *Item, tail []byte, err error) {
                        }
                        {
                                s := sub.V.(string)
+                               if len(s) == 0 {
+                                       err = ErrMapBadKey
+                                       return
+                               }
                                if len(s) < len(keyPrev) {
                                        err = ErrMapUnordered
                                        return
index 64c7fddff7d1dee1d0985f1043944bd72b1ad7dfa05d148c6b4fb9bdf023d1c1..c419ee549f1dabf39372e80550e7c9b93ab97d6a2a115540b9fab55a5fc2714d 100644 (file)
@@ -267,6 +267,8 @@ class Map:
             if not isinstance(k, Str):
                 raise DecodeError("non-string key")
             k = str(k)
+            if len(k) == 0:
+                raise DecodeError("empty key")
             if (len(k) < len(kPrev)) or ((len(k) == len(kPrev)) and (k <= kPrev)):
                 raise DecodeError("unsorted keys")
             v, data = Decode(data)
index 69bb1b5cec135b7270b733d3b9d89efdab83284c39213c97e4cc34c9de6e792a..6c1774c926e9926d5c9bc1aae1f384273c0a04b74e1aee67bc8e3df45bbaeb18 100644 (file)
@@ -11,7 +11,7 @@ LIST [ITEM0 || ITEM1 || ...] EOC
 @end verbatim
 
 MAP contains concatenation of @ref{Strings, STR(key)}-value pairs. Keys
-@strong{must} be unique and length-first bytewise ascending ordered.
+@strong{must} be non-empty, unique and length-first bytewise ascending ordered.
 
 @verbatim
 MAP [STR(KEY0) || ITEM0 || STR(KEY1) || ITEM1 || ... ] EOC