Rate This Document
Findability
Accuracy
Completeness
Readability

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:

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

  1. Search for strncpy(status->msg, msg, sizeof(status->msg));.
    grep -nr "strncpy(status->msg, msg, sizeof(status->msg));"
  2. Replace it with strncpy(status->msg, msg, sizeof(status->msg)-1);.
    find . -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'