Fix: Dereference of null pointer in FOptiAttr

This commit is contained in:
Markus Gans 2016-07-24 13:51:36 +02:00
parent add402c5ac
commit 7d6d5cf71f
5 changed files with 34 additions and 24 deletions

View File

@ -9,7 +9,7 @@ case "$1" in
;; ;;
"--fulldebug"|"fulldebug") "--fulldebug"|"fulldebug")
./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Weffc++ -pedantic -pedantic-errors -Wextra -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wstack-protector -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy" ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Weffc++ -pedantic -pedantic-errors -Wextra -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wstack-protector -Wstrict-aliasing -Wstrict-aliasing=3 -Wswitch -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy"
;; ;;
"--profile"|"profile") "--profile"|"profile")

View File

@ -91,7 +91,7 @@ OBJS = \
TERMCAP := $(shell test -n "$$(ldd {/usr,}/lib64/libncursesw.so.5 2>/dev/null | grep libtinfo)" && echo "-ltinfo" || echo "-lncurses") TERMCAP := $(shell test -n "$$(ldd {/usr,}/lib64/libncursesw.so.5 2>/dev/null | grep libtinfo)" && echo "-ltinfo" || echo "-lncurses")
ifdef DEBUG ifdef DEBUG
OPTIMIZE = -O0 OPTIMIZE = -O0 -fsanitize=undefined
else else
OPTIMIZE = -O2 OPTIMIZE = -O2
endif endif

View File

@ -83,6 +83,7 @@ inline bool FOptiAttr::colorChange (char_data*& term, char_data*& next)
|| term->fg_color != next->fg_color || term->fg_color != next->fg_color
|| term->bg_color != next->bg_color ); || term->bg_color != next->bg_color );
} }
return false; return false;
} }
@ -199,12 +200,14 @@ void FOptiAttr::change_color (char_data*& term, char_data*& next)
char* Sf = F_set_foreground.cap; char* Sf = F_set_foreground.cap;
char* Sb = F_set_background.cap; char* Sb = F_set_background.cap;
char* sp = F_set_color_pair.cap; char* sp = F_set_color_pair.cap;
short fg = next->fg_color; short fg, bg;
short bg = next->bg_color;
if ( monochron || ! term || ! next ) if ( monochron || ! term || ! next )
return; return;
fg = next->fg_color;
bg = next->bg_color;
if ( fg == Default || bg == Default ) if ( fg == Default || bg == Default )
{ {
if ( ansi_default_color ) if ( ansi_default_color )
@ -313,9 +316,8 @@ void FOptiAttr::change_color (char_data*& term, char_data*& next)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline bool FOptiAttr::hasAttribute (char_data*& attr) inline bool FOptiAttr::hasAttribute (char_data*& attr)
{ {
if ( ! attr ) if ( attr )
return false; {
return attr->bold == true return attr->bold == true
|| attr->dim == true || attr->dim == true
|| attr->italic == true || attr->italic == true
@ -329,6 +331,9 @@ inline bool FOptiAttr::hasAttribute (char_data*& attr)
|| attr->dbl_underline == true || attr->dbl_underline == true
|| attr->alt_charset == true || attr->alt_charset == true
|| attr->pc_charset == true; || attr->pc_charset == true;
}
return false;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -355,8 +360,11 @@ inline void FOptiAttr::resetAttribute (char_data*& attr)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline void FOptiAttr::reset (char_data*& attr) inline void FOptiAttr::reset (char_data*& attr)
{ {
if ( attr )
{
resetAttribute(attr); resetAttribute(attr);
resetColor(attr); resetColor(attr);
}
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -915,8 +923,10 @@ short FOptiAttr::vga2ansi (register short color)
0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7,
8, 12, 10, 14, 9, 13, 11, 15 8, 12, 10, 14, 9, 13, 11, 15
}; };
color = lookup_table[color]; color = lookup_table[color];
} }
return color; return color;
} }

View File

@ -16,7 +16,7 @@ INCLUDES = -I../src
RM = rm -f RM = rm -f
ifdef DEBUG ifdef DEBUG
OPTIMIZE = -O0 OPTIMIZE = -O0 -fsanitize=undefined
else else
OPTIMIZE = -O2 OPTIMIZE = -O2
endif endif