Release calc 2.12.7.2

Fixed a segfault when getpwuid() returned NULL during initialization.
Thanks goes to baratharon GitHub user for reporting this issue.
This commit is contained in:
Landon Curt Noll
2018-11-28 12:27:04 -08:00
parent 37ad43c7fd
commit c5e416c41f
6 changed files with 38 additions and 24 deletions

View File

@@ -15,7 +15,8 @@ The following are the changes from calc version 2.12.7.1 to date:
\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:

View File

@@ -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
#

View File

@@ -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
#

View File

@@ -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
#

View File

@@ -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));

View File

@@ -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 */
/*