summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Carr <jfc@mit.edu>1990-12-03 05:28:20 +0000
committerJohn Carr <jfc@mit.edu>1990-12-03 05:28:20 +0000
commit2f068512794f84f6b6c3ad57d83a4cfde184d80a (patch)
tree03b25d9fd5f01f553811ab5492aefc39e5d3fda9
parenta97515dfeec8b695e260901476802bccdcc7ab29 (diff)
downloadkrb5-2f068512794f84f6b6c3ad57d83a4cfde184d80a.tar.gz
krb5-2f068512794f84f6b6c3ad57d83a4cfde184d80a.tar.xz
krb5-2f068512794f84f6b6c3ad57d83a4cfde184d80a.zip
readin_string must be declared volatile, since it may be accessed
after a longjmp() git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1522 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/krb5/os/read_pwd.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/lib/krb5/os/read_pwd.c b/src/lib/krb5/os/read_pwd.c
index d86d6ee1b3..367d5ecee1 100644
--- a/src/lib/krb5/os/read_pwd.c
+++ b/src/lib/krb5/os/read_pwd.c
@@ -61,8 +61,11 @@ char *return_pwd;
int *size_return;
{
/* adapted from Kerberos v4 des/read_password.c */
-
- char *readin_string = 0;
+#if defined(__STDC__) || defined(mips)
+ /* readin_string is used after a longjmp, so must be volatile */
+ volatile
+#endif
+ char *readin_string = 0;
register char *ptr;
int scratchchar;
krb5_sigtype (*ointrfunc)();
@@ -95,8 +98,8 @@ int *size_return;
if (setjmp(pwd_jump)) {
/* interrupted */
if (readin_string) {
- (void) memset(readin_string, 0, *size_return);
- free(readin_string);
+ (void) memset((char *)readin_string, 0, *size_return);
+ free((char *)readin_string);
}
(void) memset(return_pwd, 0, *size_return);
cleanup(KRB5_LIBOS_PWDINTR);
@@ -135,18 +138,18 @@ int *size_return;
(void) memset(return_pwd, 0, *size_return);
cleanup(ENOMEM);
}
- (void) memset(readin_string, 0, *size_return);
- if (fgets(readin_string, *size_return, stdin) == NULL) {
+ (void) memset((char *)readin_string, 0, *size_return);
+ if (fgets((char *)readin_string, *size_return, stdin) == NULL) {
/* error */
(void) putchar('\n');
- (void) memset(readin_string, 0, *size_return);
+ (void) memset((char *)readin_string, 0, *size_return);
(void) memset(return_pwd, 0, *size_return);
- free(readin_string);
+ free((char *)readin_string);
cleanup(KRB5_LIBOS_CANTREADPWD);
}
(void) putchar('\n');
- if (ptr = strchr(readin_string, '\n'))
+ if (ptr = strchr((char *)readin_string, '\n'))
*ptr = '\0';
else /* need to flush */
do {
@@ -154,14 +157,14 @@ int *size_return;
} while (scratchchar != EOF && scratchchar != '\n');
/* compare */
- if (strncmp(return_pwd, readin_string, *size_return)) {
- (void) memset(readin_string, 0, *size_return);
+ if (strncmp(return_pwd, (char *)readin_string, *size_return)) {
+ (void) memset((char *)readin_string, 0, *size_return);
(void) memset(return_pwd, 0, *size_return);
- free(readin_string);
+ free((char *)readin_string);
cleanup(KRB5_LIBOS_BADPWDMATCH);
}
- (void) memset(readin_string, 0, *size_return);
- free(readin_string);
+ (void) memset((char *)readin_string, 0, *size_return);
+ free((char *)readin_string);
}
/* reset intrfunc */