blob: 5f82d4ea43bb0dd46ae9a4a7721d17b574c284ec [file] [log] [blame]
commit 9bd23dab4240b015321a53c45b3c9e4847fbf020
Author: Joshua Haberman <jhaberman@gmail.com>
Date: Tue Apr 7 15:22:11 2020 -0700
Changed upb status to suit GCC10's warning about strncpy(). (#268)
Added tests for all cases. Also removed ellipses from truncated
messages, they were more trouble than they are worth.
diff --git a/upb/upb.c b/upb/upb.c
index cb2cdfd..258192d 100644
--- a/upb/upb.c
+++ b/upb/upb.c
@@ -11,17 +11,6 @@
#include "upb/port_def.inc"
-/* Guarantee null-termination and provide ellipsis truncation.
- * It may be tempting to "optimize" this by initializing these final
- * four bytes up-front and then being careful never to overwrite them,
- * this is safer and simpler. */
-static void nullz(upb_status *status) {
- const char *ellipsis = "...";
- size_t len = strlen(ellipsis);
- UPB_ASSERT(sizeof(status->msg) > len);
- memcpy(status->msg + sizeof(status->msg) - len, ellipsis, len);
-}
-
/* upb_status *****************************************************************/
void upb_status_clear(upb_status *status) {
@@ -37,8 +26,8 @@ const char *upb_status_errmsg(const upb_status *status) { return status->msg; }
void upb_status_seterrmsg(upb_status *status, const char *msg) {
if (!status) return;
status->ok = false;
- strncpy(status->msg, msg, sizeof(status->msg));
- nullz(status);
+ strncpy(status->msg, msg, UPB_STATUS_MAX_MESSAGE - 1);
+ status->msg[UPB_STATUS_MAX_MESSAGE - 1] = '\0';
}
void upb_status_seterrf(upb_status *status, const char *fmt, ...) {
@@ -52,7 +41,7 @@ void upb_status_vseterrf(upb_status *status, const char *fmt, va_list args) {
if (!status) return;
status->ok = false;
_upb_vsnprintf(status->msg, sizeof(status->msg), fmt, args);
- nullz(status);
+ status->msg[UPB_STATUS_MAX_MESSAGE - 1] = '\0';
}
/* upb_alloc ******************************************************************/