Syntax Error Reported During upb.c Compilation
Symptom
An error occurs when the upb.c file is compiled during TF-Serving compilation, and the message "'__builtin_strncpy' specified bound 127 equals destination size [-Werror=stringop-truncation]" is displayed. The details are as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 | WARNING: errors encountered while analyzing target '//tensorflow_serving/model_servers:tensorflow_model_server': it will not be built In file included from /usr/include/string.h:519, from external/upb/upb/upb.h:16, from external/upb/upb/upb.c:2: In function 'strncpy', inlined from 'upb_status_seterrmsg' at external/upb/upb/upb.c:40:3: /usr/include/bits/string_fortified.h:95:10: error: '__builtin_strncpy' specified bound 127 equals destination size [-Werror=stringop-truncation] 95 | return __builtin___strncpy_chk (__dest, __src, __len, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 96 | __glibc_objsize (__dest)); | ~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors Target //tensorflow_serving/model_servers:tensorflow_model_server failed to build |
Key Process and Cause Analysis
The strncpy function is incorrectly used, and the TF-Serving does not update the upb version in a timely manner.
Conclusion and Solution
- Search for strncpy(status->msg, msg, sizeof(status->msg));.
1grep -nr "strncpy(status->msg, msg, sizeof(status->msg));"
- Replace it with strncpy(status->msg, msg, sizeof(status->msg)-1);.
1find . -type f -name "*.c" -o -name "*.h" | xargs grep -l 'strncpy(status->msg, msg, sizeof(status->msg));' | xargs sed -i 's/strncpy(status->msg, msg, sizeof(status->msg));/strncpy(status->msg, msg, sizeof(status->msg)-1);/g'
Parent topic: Troubleshooting