diff --git a/CHANGES b/CHANGES index b7a4b81..bf3a875 100644 --- a/CHANGES +++ b/CHANGES @@ -4,18 +4,19 @@ The following are the changes from calc version 2.12.7.1 to date: NL. The code in 2.12.7.0 is correct. The CHANGE notes should have read: - The following is a partial list of escape sequences recognized - in strings and in printf formats: + The following is a partial list of escape sequences recognized + in strings and in printf formats: - \a audible bell byte 0x07 in ASCII encoding - \b backspace byte 0x08 in ASCII encoding - \f form feed byte 0x0c in ASCII encoding - \n newline byte 0x0a in ASCII encoding - \r return byte 0x0d in ASCII encoding - \t tab byte 0x09 in ASCII encoding - \v vertical tab byte 0x0b in ASCII encoding + \a audible bell byte 0x07 in ASCII encoding + \b backspace byte 0x08 in ASCII encoding + \f form feed byte 0x0c in ASCII encoding + \n newline byte 0x0a in ASCII encoding + \r return byte 0x0d in ASCII encoding + \t tab byte 0x09 in ASCII encoding + \v vertical tab byte 0x0b in ASCII encoding - Sorry! + Fixed a segfault when getpwuid() returned NULL during initialization. + Thanks goes to baratharon GitHub user for reporting this issue. The following are the changes from calc version 2.12.6.10: to 2.12.7.0: diff --git a/Makefile.ship b/Makefile.ship index 812d8b2..e9630f8 100644 --- a/Makefile.ship +++ b/Makefile.ship @@ -1054,7 +1054,7 @@ EXT= # The default calc versions # -VERSION= 2.12.7.1 +VERSION= 2.12.7.2 # Names of shared libraries with versions # diff --git a/custom/Makefile b/custom/Makefile index 393e5cb..894e7f4 100644 --- a/custom/Makefile +++ b/custom/Makefile @@ -348,7 +348,7 @@ EXT= # The default calc versions # -VERSION= 2.12.7.1 +VERSION= 2.12.7.2 # Names of shared libraries with versions # diff --git a/custom/Makefile.head b/custom/Makefile.head index 39663fe..94d14a1 100644 --- a/custom/Makefile.head +++ b/custom/Makefile.head @@ -348,7 +348,7 @@ EXT= # The default calc versions # -VERSION= 2.12.7.1 +VERSION= 2.12.7.2 # Names of shared libraries with versions # diff --git a/lib_calc.c b/lib_calc.c index 675ed22..c44d3e6 100644 --- a/lib_calc.c +++ b/lib_calc.c @@ -1,7 +1,7 @@ /* * lib_calc - calc link library initialization and shutdown routines * - * Copyright (C) 1999-2007 Landon Curt Noll + * Copyright (C) 1999-2007,2018 Landon Curt Noll * * Calc is open software; you can redistribute it and/or modify it under * the terms of the version 2.1 of the GNU Lesser General Public License @@ -504,22 +504,35 @@ initenv(void) home = (c ? strdup(c) : NULL); #if defined(_WIN32) if (home == NULL || home[0] == '\0') { + /* free home if it was previously allocated, but empty */ + if (home != NULL) { + free(home); + } /* just assume . is home if all else fails */ - home = "."; + home = strdup("."); } #else /* Windoz free systems */ if (home == NULL || home[0] == '\0') { - size_t pw_dir_len; - ent = (struct passwd *)getpwuid(geteuid()); - if (ent == NULL) { - /* just assume . is home if all else fails */ - home = "."; + /* free home if it was previously allocated, but empty */ + if (home != NULL) { + free(home); + } + /* try using the home directory of current effective UID from password file */ + ent = (struct passwd *)getpwuid(geteuid()); + if (ent == NULL || ent->pw_dir == NULL || ent->pw_dir[0] == '\0') { + /* just assume . is home if all else fails */ + home = strdup("."); + } else { + /* use home directory of current effective UID from password file */ + home = strdup(ent->pw_dir); } - pw_dir_len = strlen(ent->pw_dir); - home = (char *)malloc(pw_dir_len+1); - strncpy(home, ent->pw_dir, pw_dir_len+1); } #endif /* Windoz free systems */ + /* paranoia */ + if (home == NULL) { + math_error("Unable to allocate string for $HOME"); + /*NOTREACHED*/ + } /* determine the $PAGER value */ c = (no_env ? NULL : getenv(PAGER)); diff --git a/version.c b/version.c index 7ed7e61..bafd8c0 100644 --- a/version.c +++ b/version.c @@ -45,7 +45,7 @@ static char *program; #define MAJOR_VER 2 /* major library version */ #define MINOR_VER 12 /* minor library version */ #define MAJOR_PATCH 7 /* major software level under library version */ -#define MINOR_PATCH 1 /* minor software level or 0 if not patched */ +#define MINOR_PATCH 2 /* minor software level or 0 if not patched */ /*