fix more problems with strings that contain nulls but shouldn't
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3994 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
5ab28f2716
commit
f85a1eb48a
|
@ -1,6 +1,9 @@
|
|||
CVS code -
|
||||
- General:
|
||||
- Miscellaneous comment fixes. (DLR)
|
||||
- browser.c:
|
||||
do_browser()
|
||||
- Properly handle directories that contain nulls. (DLR)
|
||||
- files.c:
|
||||
do_insertfile()
|
||||
- Properly handle filenames and executable commands that contain
|
||||
|
|
|
@ -231,7 +231,9 @@ char *do_browser(char *path, DIR *dir)
|
|||
#endif
|
||||
bottombars(browser_list);
|
||||
|
||||
if (i < 0) {
|
||||
/* If the directory begins with a newline (i.e. an
|
||||
* encoded null), treat it as though it's blank. */
|
||||
if (i < 0 || answer[0] == '\n') {
|
||||
/* We canceled. Indicate that on the statusbar, and
|
||||
* blank out ans, since we're done with it. */
|
||||
statusbar(_("Cancelled"));
|
||||
|
@ -251,6 +253,11 @@ char *do_browser(char *path, DIR *dir)
|
|||
* with it. */
|
||||
ans = mallocstrcpy(ans, "");
|
||||
|
||||
/* Convert newlines to nulls, just before we go to the
|
||||
* directory. */
|
||||
sunder(answer);
|
||||
align(&answer);
|
||||
|
||||
new_path = real_dir_from_tilde(answer);
|
||||
|
||||
if (new_path[0] != '/') {
|
||||
|
|
43
src/files.c
43
src/files.c
|
@ -739,7 +739,7 @@ void do_insertfile(
|
|||
statusbar(_("Cancelled"));
|
||||
break;
|
||||
} else {
|
||||
size_t pww_save = openfile->placewewant, answer_len;
|
||||
size_t pww_save = openfile->placewewant;
|
||||
|
||||
ans = mallocstrcpy(ans, answer);
|
||||
|
||||
|
@ -802,11 +802,10 @@ void do_insertfile(
|
|||
}
|
||||
#endif
|
||||
|
||||
answer_len = strlen(answer);
|
||||
|
||||
/* Convert newlines to nulls, just before we insert a file
|
||||
* or execute a command. */
|
||||
/* Convert newlines to nulls, just before we insert the file
|
||||
* or execute the command. */
|
||||
sunder(answer);
|
||||
align(&answer);
|
||||
|
||||
#ifndef NANO_TINY
|
||||
if (execute) {
|
||||
|
@ -842,10 +841,6 @@ void do_insertfile(
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Convert nulls to newlines. answer_len is answer's real
|
||||
* length. */
|
||||
unsunder(answer, answer_len);
|
||||
|
||||
#ifdef ENABLE_MULTIBUFFER
|
||||
if (ISSET(MULTIBUFFER))
|
||||
/* Update the screen to account for the current
|
||||
|
@ -1885,18 +1880,29 @@ int do_writeout(bool exiting)
|
|||
#endif
|
||||
|
||||
if (append == OVERWRITE) {
|
||||
char *full_answer = get_full_path(answer);
|
||||
char *full_filename = get_full_path(openfile->filename);
|
||||
bool different_name = (strcmp(full_answer,
|
||||
full_filename) != 0);
|
||||
size_t answer_len = strlen(answer);
|
||||
bool name_exists, different_name;
|
||||
char *full_answer, *full_filename;
|
||||
struct stat st;
|
||||
bool name_exists;
|
||||
|
||||
/* Convert newlines to nulls, just before we get the
|
||||
* full path. */
|
||||
sunder(answer);
|
||||
|
||||
name_exists = (stat(answer, &st) != -1);
|
||||
full_answer = get_full_path(answer);
|
||||
|
||||
/* Convert nulls to newlines. answer_len is the
|
||||
* string's real length. */
|
||||
unsunder(answer, answer_len);
|
||||
|
||||
full_filename = get_full_path(openfile->filename);
|
||||
different_name = (strcmp(full_answer,
|
||||
full_filename) != 0);
|
||||
|
||||
free(full_filename);
|
||||
free(full_answer);
|
||||
|
||||
name_exists = (stat(answer, &st) != -1);
|
||||
|
||||
if (different_name) {
|
||||
if (name_exists) {
|
||||
/* If we're using restricted mode, we aren't
|
||||
|
@ -1927,6 +1933,11 @@ int do_writeout(bool exiting)
|
|||
}
|
||||
}
|
||||
|
||||
/* Convert newlines to nulls, just before we save the
|
||||
* file. */
|
||||
sunder(answer);
|
||||
align(&answer);
|
||||
|
||||
#ifndef NANO_TINY
|
||||
/* Here's where we allow the selected text to be written to
|
||||
* a separate file. If we're using restricted mode, this is
|
||||
|
|
Loading…
Reference in New Issue