|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
#
|
|
# Filename: package/.../musl/0008-fix-undefined-pointer-comparison-in-stdio-internal-_.patch
|
|
# Copyright (C) 2016 The OpenSDE Project
|
|
#
|
|
# More information can be found in the files COPYING and README.
|
|
#
|
|
# This patch file is dual-licensed. It is available under the license the
|
|
# patched project is licensed under, as long as it is an OpenSource license
|
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
|
# of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
# version.
|
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
|
|
From 6d1a3dfeaf2caac4033a3c65822fb4e7e14866c7 Mon Sep 17 00:00:00 2001
|
|
From: Rich Felker <dalias@aerifal.cx>
|
|
Date: Mon, 28 Mar 2016 23:41:17 -0400
|
|
Subject: [PATCH] fix undefined pointer comparison in stdio-internal __toread
|
|
|
|
the comparison f->wpos > f->buf has undefined behavior when f->wpos is
|
|
a null pointer, despite the intuition (and actual compiler behavior,
|
|
for all known compilers) being that NULL > ptr is false for all valid
|
|
pointers ptr.
|
|
|
|
the purpose of the comparison is to determine if the write buffer is
|
|
non-empty, and the idiom used elsewhere for that is comparison against
|
|
f->wbase, which is either a null pointer when not writing, or equal to
|
|
f->buf when writing. in the former case, both f->wpos and f->wbase are
|
|
null; in the latter they are both non-null and point into the same
|
|
array.
|
|
---
|
|
src/stdio/__toread.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/stdio/__toread.c b/src/stdio/__toread.c
|
|
index b08f5bb..35f67b8 100644
|
|
--- a/src/stdio/__toread.c
|
|
+++ b/src/stdio/__toread.c
|
|
@@ -3,7 +3,7 @@
|
|
int __toread(FILE *f)
|
|
{
|
|
f->mode |= f->mode-1;
|
|
- if (f->wpos > f->buf) f->write(f, 0, 0);
|
|
+ if (f->wpos > f->wbase) f->write(f, 0, 0);
|
|
f->wpos = f->wbase = f->wend = 0;
|
|
if (f->flags & F_NORD) {
|
|
f->flags |= F_ERR;
|
|
--
|
|
2.7.4
|
|
|