There's an interesting twist in vstring_vstream.c, when
two typos, each of which makes the code wrong, compensate
for each other, making the result right, but the code
being confusing:

    (VSTRING_LEN(vp) > (base_len) ? vstring_end(vp)[-1] : VSTREAM_EOF)

int     vstring_get_flags(VSTRING *vp, VSTREAM *fp, int flags)
{
    ssize_t base_len = VSTRING_LEN(vp);
    ..
    return (VSTRING_GET_RESULT(vp, baselen));
}

in the macro VSTRING_GET_RESULT(), parameter baselen is not
used, instead, some out-of-context base_len symbol is.  While
in all places where VSTRING_GET_RESULT() is used, a non-existing
symbol baselen is passed as an (unused) parameter.  At the same
time, local variable base_len exists which meant to be used as
the parameter.

Fix this by renaming one of the two names.

Signed-off-by: Michael Tokarev <m...@tls.msk.ru>
---
 src/util/vstring_vstream.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/util/vstring_vstream.c b/src/util/vstring_vstream.c
index 451cc5017..3bf5e050f 100644
--- a/src/util/vstring_vstream.c
+++ b/src/util/vstring_vstream.c
@@ -123,7 +123,7 @@
  /*
   * Macro to return the last character added to a VSTRING, for consistency.
   */
-#define VSTRING_GET_RESULT(vp, baselen) \
+#define VSTRING_GET_RESULT(vp, base_len) \
     (VSTRING_LEN(vp) > (base_len) ? vstring_end(vp)[-1] : VSTREAM_EOF)
 
 /* vstring_get_flags - read line from file, keep newline */
@@ -142,7 +142,7 @@ int     vstring_get_flags(VSTRING *vp, VSTREAM *fp, int 
flags)
            break;
     }
     VSTRING_TERMINATE(vp);
-    return (VSTRING_GET_RESULT(vp, baselen));
+    return (VSTRING_GET_RESULT(vp, base_len));
 }
 
 /* vstring_get_flags_nonl - read line from file, strip newline */
@@ -158,7 +158,7 @@ int     vstring_get_flags_nonl(VSTRING *vp, VSTREAM *fp, 
int flags)
     while ((c = VSTREAM_GETC(fp)) != VSTREAM_EOF && c != '\n')
        VSTRING_ADDCH(vp, c);
     VSTRING_TERMINATE(vp);
-    return (c == '\n' ? c : VSTRING_GET_RESULT(vp, baselen));
+    return (c == '\n' ? c : VSTRING_GET_RESULT(vp, base_len));
 }
 
 /* vstring_get_flags_null - read null-terminated string from file */
@@ -174,7 +174,7 @@ int     vstring_get_flags_null(VSTRING *vp, VSTREAM *fp, 
int flags)
     while ((c = VSTREAM_GETC(fp)) != VSTREAM_EOF && c != 0)
        VSTRING_ADDCH(vp, c);
     VSTRING_TERMINATE(vp);
-    return (c == 0 ? c : VSTRING_GET_RESULT(vp, baselen));
+    return (c == 0 ? c : VSTRING_GET_RESULT(vp, base_len));
 }
 
 /* vstring_get_flags_bound - read line from file, keep newline, up to bound */
@@ -197,7 +197,7 @@ int     vstring_get_flags_bound(VSTRING *vp, VSTREAM *fp, 
int flags,
            break;
     }
     VSTRING_TERMINATE(vp);
-    return (VSTRING_GET_RESULT(vp, baselen));
+    return (VSTRING_GET_RESULT(vp, base_len));
 }
 
 /* vstring_get_flags_nonl_bound - read line from file, strip newline, up to 
bound */
@@ -217,7 +217,7 @@ int     vstring_get_flags_nonl_bound(VSTRING *vp, VSTREAM 
*fp, int flags,
     while (bound-- > 0 && (c = VSTREAM_GETC(fp)) != VSTREAM_EOF && c != '\n')
        VSTRING_ADDCH(vp, c);
     VSTRING_TERMINATE(vp);
-    return (c == '\n' ? c : VSTRING_GET_RESULT(vp, baselen));
+    return (c == '\n' ? c : VSTRING_GET_RESULT(vp, base_len));
 }
 
 /* vstring_get_flags_null_bound - read null-terminated string from file */
@@ -237,7 +237,7 @@ int     vstring_get_flags_null_bound(VSTRING *vp, VSTREAM 
*fp, int flags,
     while (bound-- > 0 && (c = VSTREAM_GETC(fp)) != VSTREAM_EOF && c != 0)
        VSTRING_ADDCH(vp, c);
     VSTRING_TERMINATE(vp);
-    return (c == 0 ? c : VSTRING_GET_RESULT(vp, baselen));
+    return (c == 0 ? c : VSTRING_GET_RESULT(vp, base_len));
 }
 
 #ifdef TEST
-- 
2.39.5

_______________________________________________
Postfix-devel mailing list -- postfix-devel@postfix.org
To unsubscribe send an email to postfix-devel-le...@postfix.org

Reply via email to