Skip to content

Warnings are not aloud if you want to build correctly nginx #2

Description

@concatime

Hi.
When using the recommended -Wformat -Werror=format-security, it's impossible to build because of these warnings:

src/core/ngx_string.c:2040:9: error: assigning to 'u_char *' (aka 'unsigned char *') from 'char [24]' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
        prefix = NGX_PREFIX;
               ^ ~~~~~~~~~~
src/core/ngx_string.c:2042:23: error: passing 'u_char *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
    if (prefix[strlen(prefix) - 1] == '/')
                      ^~~~~~
/usr/include/string.h:394:35: note: passing argument to parameter '__s' here
extern size_t strlen (const char *__s)
                                  ^
src/core/ngx_string.c:2043:16: error: passing 'u_char *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
        plen = strlen(prefix) - 1;
                      ^~~~~~
/usr/include/string.h:394:35: note: passing argument to parameter '__s' here
extern size_t strlen (const char *__s)
                                  ^
src/core/ngx_string.c:2045:16: error: passing 'u_char *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
        plen = strlen(prefix);
                      ^~~~~~
/usr/include/string.h:394:35: note: passing argument to parameter '__s' here
extern size_t strlen (const char *__s)
                                  ^
src/core/ngx_string.c:2047:49: error: passing 'u_char *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
    if (!ngx_strncmp(path->data, prefix, strlen(prefix))) {
                                                ^~~~~~
src/core/ngx_string.h:53:79: note: expanded from macro 'ngx_strncmp'
#define ngx_strncmp(s1, s2, n)  strncmp((const char *) s1, (const char *) s2, n)
                                                                              ^
/usr/include/x86_64-linux-gnu/bits/string2.h:154:41: note: expanded from macro 'strncmp'
  (__extension__ (__builtin_constant_p (n)                                    \
                                        ^
/usr/include/string.h:394:35: note: passing argument to parameter '__s' here
extern size_t strlen (const char *__s)
                                  ^
src/core/ngx_string.c:2047:49: error: passing 'u_char *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
    if (!ngx_strncmp(path->data, prefix, strlen(prefix))) {
                                                ^~~~~~
src/core/ngx_string.h:53:79: note: expanded from macro 'ngx_strncmp'
#define ngx_strncmp(s1, s2, n)  strncmp((const char *) s1, (const char *) s2, n)
                                                                              ^
/usr/include/x86_64-linux-gnu/bits/string2.h:156:38: note: expanded from macro 'strncmp'
                       && strlen (s1) < ((size_t) (n)))                       \
                                                   ^
/usr/include/string.h:394:35: note: passing argument to parameter '__s' here
extern size_t strlen (const char *__s)
                                  ^
src/core/ngx_string.c:2047:49: error: passing 'u_char *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
    if (!ngx_strncmp(path->data, prefix, strlen(prefix))) {
                                                ^~~~~~
src/core/ngx_string.h:53:79: note: expanded from macro 'ngx_strncmp'
#define ngx_strncmp(s1, s2, n)  strncmp((const char *) s1, (const char *) s2, n)
                                                                              ^
/usr/include/x86_64-linux-gnu/bits/string2.h:158:34: note: expanded from macro 'strncmp'
                          && strlen (s2) < ((size_t) (n))))                   \
                                                      ^
/usr/include/string.h:394:35: note: passing argument to parameter '__s' here
extern size_t strlen (const char *__s)
                                  ^
src/core/ngx_string.c:2047:49: error: passing 'u_char *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
    if (!ngx_strncmp(path->data, prefix, strlen(prefix))) {
                                                ^~~~~~
src/core/ngx_string.h:53:79: note: expanded from macro 'ngx_strncmp'
#define ngx_strncmp(s1, s2, n)  strncmp((const char *) s1, (const char *) s2, n)
                                                                              ^
/usr/include/x86_64-linux-gnu/bits/string2.h:159:42: note: expanded from macro 'strncmp'
                  ? strcmp (s1, s2) : strncmp (s1, s2, n)))
                                                       ^
/usr/include/string.h:394:35: note: passing argument to parameter '__s' here
extern size_t strlen (const char *__s)
                                  ^
src/core/ngx_string.c:2049:24: error: passing 'char *' to parameter of type 'u_char *' (aka 'unsigned char *') converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
       x = ngx_cpystrn(buf, path->data + plen, path->len);
                       ^~~
src/core/ngx_string.c:49:21: note: passing argument to parameter 'dst' here
ngx_cpystrn(u_char *dst, u_char *src, size_t n)
                    ^
src/core/ngx_string.c:2049:10: error: assigning to 'char *' from 'u_char *' (aka 'unsigned char *') converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
       x = ngx_cpystrn(buf, path->data + plen, path->len);
         ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/core/ngx_string.c:2051:19: error: assigning to 'u_char *' (aka 'unsigned char *') from 'char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
       path->data = buf;
                  ^ ~~~
11 errors generated.
make[1]: *** [objs/src/core/ngx_string.o] Error 1
make: *** [build] Error 2

It would be paradoxal/ironic to not use the recommended habits in a patch coming from OpenBSD, known for its security ;)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions