Ensure all read utilities yield constant string pointers for safety.
This commit is contained in:
@@ -43,7 +43,7 @@ const char *mpw_getenv(const char *variableName) {
|
||||
return envBuf? mpw_strdup( envBuf ): NULL;
|
||||
}
|
||||
|
||||
char *mpw_askpass(const char *prompt) {
|
||||
const char *mpw_askpass(const char *prompt) {
|
||||
|
||||
const char *askpass = mpw_getenv( MP_ENV_askpass );
|
||||
if (!askpass)
|
||||
@@ -74,7 +74,7 @@ char *mpw_askpass(const char *prompt) {
|
||||
}
|
||||
|
||||
close( pipes[1] );
|
||||
char *answer = mpw_read_fd( pipes[0] );
|
||||
const char *answer = mpw_read_fd( pipes[0] );
|
||||
close( pipes[0] );
|
||||
int status;
|
||||
if (waitpid( pid, &status, 0 ) == ERR) {
|
||||
@@ -86,7 +86,7 @@ char *mpw_askpass(const char *prompt) {
|
||||
if (WIFEXITED( status ) && WEXITSTATUS( status ) == EXIT_SUCCESS && answer && strlen( answer )) {
|
||||
// Remove trailing newline.
|
||||
if (answer[strlen( answer ) - 1] == '\n')
|
||||
answer[strlen( answer ) - 1] = '\0';
|
||||
mpw_replace_string( answer, mpw_strndup( answer, strlen( answer ) - 1 ) );
|
||||
return answer;
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ char *mpw_askpass(const char *prompt) {
|
||||
static const char *_mpw_getline(const char *prompt, bool silent) {
|
||||
|
||||
// Get answer from askpass.
|
||||
char *answer = mpw_askpass( prompt );
|
||||
const char *answer = mpw_askpass( prompt );
|
||||
if (answer)
|
||||
return answer;
|
||||
|
||||
@@ -250,7 +250,7 @@ bool mpw_mkdirs(const char *filePath) {
|
||||
return success;
|
||||
}
|
||||
|
||||
char *mpw_read_fd(int fd) {
|
||||
const char *mpw_read_fd(int fd) {
|
||||
|
||||
char *buf = NULL;
|
||||
size_t blockSize = 4096, bufSize = 0, bufOffset = 0;
|
||||
@@ -263,7 +263,7 @@ char *mpw_read_fd(int fd) {
|
||||
return buf;
|
||||
}
|
||||
|
||||
char *mpw_read_file(FILE *file) {
|
||||
const char *mpw_read_file(FILE *file) {
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
@@ -36,7 +36,7 @@ const char *mpw_getenv(const char *variableName);
|
||||
|
||||
/** Use the askpass program to prompt the user.
|
||||
* @return A newly allocated string or NULL if askpass is not supported or an error occurred. */
|
||||
char *mpw_askpass(const char *prompt);
|
||||
const char *mpw_askpass(const char *prompt);
|
||||
|
||||
/** Ask the user a question.
|
||||
* @return A newly allocated string or NULL if an error occurred trying to read from the user. */
|
||||
@@ -58,11 +58,11 @@ bool mpw_mkdirs(const char *filePath);
|
||||
|
||||
/** Read until EOF from the given file descriptor.
|
||||
* @return A newly allocated string or NULL the read buffer couldn't be allocated. */
|
||||
char *mpw_read_fd(int fd);
|
||||
const char *mpw_read_fd(int fd);
|
||||
|
||||
/** Read the file contents of a given file.
|
||||
* @return A newly allocated string or NULL the read buffer couldn't be allocated. */
|
||||
char *mpw_read_file(FILE *file);
|
||||
const char *mpw_read_file(FILE *file);
|
||||
|
||||
/** Encode a visual fingerprint for a user.
|
||||
* @return A newly allocated string. */
|
||||
|
@@ -476,8 +476,8 @@ void cli_user(Arguments *args, Operation *operation) {
|
||||
|
||||
else {
|
||||
// Read file.
|
||||
char *sitesInputData = mpw_read_file( sitesFile );
|
||||
if (ferror( sitesFile ))
|
||||
const char *sitesInputData = mpw_read_file( sitesFile );
|
||||
if (!sitesInputData || ferror( sitesFile ))
|
||||
wrn( "Error while reading configuration file:\n %s: %d", operation->sitesPath, ferror( sitesFile ) );
|
||||
fclose( sitesFile );
|
||||
|
||||
|
Reference in New Issue
Block a user