Module Name: src
Committed By: rillig
Date: Sun May 12 09:07:41 UTC 2024
Modified Files:
src/usr.bin/xlint/lint1: cgram.y lex.c tree.c
Log Message:
lint: don't call memcpy with null pointer
Even copying 0 bytes from a null pointer invokes undefined behavior.
To generate a diff of this commit:
cvs rdiff -u -r1.502 -r1.503 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.226 -r1.227 src/usr.bin/xlint/lint1/lex.c
cvs rdiff -u -r1.642 -r1.643 src/usr.bin/xlint/lint1/tree.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.502 src/usr.bin/xlint/lint1/cgram.y:1.503
--- src/usr.bin/xlint/lint1/cgram.y:1.502 Sun May 12 08:48:36 2024
+++ src/usr.bin/xlint/lint1/cgram.y Sun May 12 09:07:41 2024
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.502 2024/05/12 08:48:36 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.503 2024/05/12 09:07:41 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.502 2024/05/12 08:48:36 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.503 2024/05/12 09:07:41 rillig Exp $");
#endif
#include <limits.h>
@@ -118,9 +118,10 @@ attribute_list_add(attribute_list *list,
attribute *old_attrs = list->attrs;
list->cap = 16 + 2 * list->cap;
list->attrs = block_zero_alloc(
- list->cap * sizeof(*list->attrs), "attribute_list.attrs");
- memcpy(list->attrs, old_attrs,
- list->len * sizeof(*list->attrs));
+ list->cap * sizeof(*list->attrs), "attribute[]");
+ if (list->len > 0)
+ memcpy(list->attrs, old_attrs,
+ list->len * sizeof(*list->attrs));
}
list->attrs[list->len++] = attr;
}
Index: src/usr.bin/xlint/lint1/lex.c
diff -u src/usr.bin/xlint/lint1/lex.c:1.226 src/usr.bin/xlint/lint1/lex.c:1.227
--- src/usr.bin/xlint/lint1/lex.c:1.226 Sun May 12 08:48:36 2024
+++ src/usr.bin/xlint/lint1/lex.c Sun May 12 09:07:41 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.226 2024/05/12 08:48:36 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.227 2024/05/12 09:07:41 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: lex.c,v 1.226 2024/05/12 08:48:36 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.227 2024/05/12 09:07:41 rillig Exp $");
#endif
#include <ctype.h>
@@ -1545,9 +1545,10 @@ seq_reserve(balanced_token_sequence *seq
seq->cap = 16 + 2 * seq->cap;
const balanced_token *old_tokens = seq->tokens;
balanced_token *new_tokens = block_zero_alloc(
- seq->cap * sizeof(*seq->tokens), "balanced_tokens");
- memcpy(new_tokens, old_tokens,
- seq->len * sizeof(*seq->tokens));
+ seq->cap * sizeof(*seq->tokens), "balanced_token[]");
+ if (seq->len > 0)
+ memcpy(new_tokens, old_tokens,
+ seq->len * sizeof(*seq->tokens));
seq->tokens = new_tokens;
}
}
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.642 src/usr.bin/xlint/lint1/tree.c:1.643
--- src/usr.bin/xlint/lint1/tree.c:1.642 Sat May 11 15:53:38 2024
+++ src/usr.bin/xlint/lint1/tree.c Sun May 12 09:07:41 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.642 2024/05/11 15:53:38 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.643 2024/05/12 09:07:41 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: tree.c,v 1.642 2024/05/11 15:53:38 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.643 2024/05/12 09:07:41 rillig Exp $");
#endif
#include <float.h>
@@ -4214,10 +4214,10 @@ add_function_argument(function_call *cal
if (call->args_len >= call->args_cap) {
call->args_cap += 8;
tnode_t **new_args = expr_zero_alloc(
- call->args_cap * sizeof(*call->args),
- "function_call.args");
- memcpy(new_args, call->args,
- call->args_len * sizeof(*call->args));
+ call->args_cap * sizeof(*call->args), "tnode*[]");
+ if (call->args_len > 0)
+ memcpy(new_args, call->args,
+ call->args_len * sizeof(*call->args));
call->args = new_args;
}
call->args[call->args_len++] = arg;