The Samba-Bugzilla – Attachment 53 Details for
Bug 185
length bug in stat_cache_lookup() in Samba 3.0.0beta1
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Futher work on stat-cache and change-of-size
strdup_upper-statcache.patch (text/plain), 5.28 KB, created by
Andrew Bartlett
on 2003-07-20 04:39:21 UTC
(
hide
)
Description:
Futher work on stat-cache and change-of-size
Filename:
MIME Type:
Creator:
Andrew Bartlett
Created:
2003-07-20 04:39:21 UTC
Size:
5.28 KB
patch
obsolete
>? lib/become_root_dummy.c >Index: smbd/statcache.c >=================================================================== >RCS file: /home/cvs/samba/source/smbd/statcache.c,v >retrieving revision 1.13.2.9 >diff -u -r1.13.2.9 statcache.c >--- smbd/statcache.c 7 Jul 2003 20:22:35 -0000 1.13.2.9 >+++ smbd/statcache.c 17 Jul 2003 09:12:18 -0000 >@@ -98,7 +98,12 @@ > translated_path_length--; > } > >- original_path = strdup(full_orig_name); >+ if(case_sensitive) { >+ original_path = strdup(full_orig_name); >+ } else { >+ original_path = strdup_upper(full_orig_name); >+ } >+ > if (!original_path) { > SAFE_FREE(translated_path); > return; >@@ -111,9 +116,6 @@ > original_path_length--; > } > >- if(!case_sensitive) >- strupper_m(original_path); >- > if (original_path_length != translated_path_length) { > if (original_path_length < translated_path_length) { > DEBUG(0, ("OOPS - tried to store stat cache entry for werid length paths [%s] %u and [%s] %u)!\n", >@@ -161,6 +163,7 @@ > } > > scp->original_path = scp->names; >+ /* pointer into the structure... */ > scp->translated_path = scp->names + original_path_length + 1; > safe_strcpy(scp->original_path, original_path, original_path_length); > safe_strcpy(scp->translated_path, translated_path, translated_path_length); >@@ -194,7 +197,7 @@ > char **start, SMB_STRUCT_STAT *pst) > { > stat_cache_entry *scp; >- pstring chk_name; >+ char *chk_name; > size_t namelen; > hash_element *hash_elem; > char *sp; >@@ -218,10 +221,20 @@ > return False; > } > >- pstrcpy(chk_name, name); >+ if (case_sensitive) { >+ chk_name = strdup(name); >+ if (!chk_name) { >+ DEBUG(0, ("stat_cache_lookup: strdup failed!\n")); >+ return False; >+ } >+ >+ } else { >+ chk_name = strdup_upper(name); >+ if (!chk_name) { >+ DEBUG(0, ("stat_cache_lookup: strdup_upper failed!\n")); >+ return False; >+ } > >- if(!case_sensitive) { >- strupper_m( chk_name ); > /* > * In some language encodings the length changes > * if we uppercase. We need to treat this differently >@@ -252,11 +265,13 @@ > * We reached the end of the name - no match. > */ > DO_PROFILE_INC(statcache_misses); >+ SAFE_FREE(chk_name); > return False; > } > if((*chk_name == '\0') || (strcmp(chk_name, ".") == 0) > || (strcmp(chk_name, "..") == 0)) { > DO_PROFILE_INC(statcache_misses); >+ SAFE_FREE(chk_name); > return False; > } > } else { >@@ -265,6 +280,7 @@ > if(SMB_VFS_STAT(conn,scp->translated_path, pst) != 0) { > /* Discard this entry - it doesn't exist in the filesystem. */ > hash_remove(&stat_cache, hash_elem); >+ SAFE_FREE(chk_name); > return False; > } > >@@ -290,6 +306,7 @@ > ++*start; > > pstrcpy(dirpath, scp->translated_path); >+ SAFE_FREE(chk_name); > return (namelen == scp->translated_path_length); > } > } >Index: lib/charcnv.c >=================================================================== >RCS file: /home/cvs/samba/source/lib/charcnv.c,v >retrieving revision 1.55.2.28 >diff -u -r1.55.2.28 charcnv.c >--- lib/charcnv.c 3 Jul 2003 19:11:28 -0000 1.55.2.28 >+++ lib/charcnv.c 17 Jul 2003 09:12:21 -0000 >@@ -334,6 +334,35 @@ > return size; > } > >+/** >+ strdup() a unix string to upper case. >+**/ >+ >+char *strdup_upper(const char *s) >+{ >+ size_t size; >+ smb_ucs2_t *buffer; >+ char *out_buffer; >+ >+ size = convert_string_allocate(CH_UNIX, CH_UCS2, s, strlen(s)+1, >+ (void **) &buffer); >+ if (size == -1) { >+ return NULL; >+ } >+ >+ strupper_w(buffer); >+ >+ size = convert_string_allocate(CH_UCS2, CH_UNIX, buffer, size, >+ (void **) &out_buffer); >+ SAFE_FREE(buffer); >+ >+ if (size == -1) { >+ return NULL; >+ } >+ >+ return out_buffer; >+} >+ > size_t unix_strlower(const char *src, size_t srclen, char *dest, size_t destlen) > { > size_t size; >@@ -353,6 +382,34 @@ > return size; > } > >+/** >+ strdup() a unix string to lower case. >+**/ >+ >+char *strdup_lower(const char *s) >+{ >+ size_t size; >+ smb_ucs2_t *buffer; >+ char *out_buffer; >+ >+ size = convert_string_allocate(CH_UNIX, CH_UCS2, s, strlen(s), >+ (void **) &buffer); >+ if (size == -1) { >+ return NULL; >+ } >+ >+ strlower_w(buffer); >+ >+ size = convert_string_allocate(CH_UCS2, CH_UNIX, buffer, size, >+ (void **) &out_buffer); >+ SAFE_FREE(buffer); >+ >+ if (size == -1) { >+ return NULL; >+ } >+ >+ return out_buffer; >+} > > static size_t ucs2_align(const void *base_ptr, const void *p, int flags) > { >Index: lib/util_str.c >=================================================================== >RCS file: /home/cvs/samba/source/lib/util_str.c,v >retrieving revision 1.47.2.28 >diff -u -r1.47.2.28 util_str.c >--- lib/util_str.c 3 Jul 2003 19:11:28 -0000 1.47.2.28 >+++ lib/util_str.c 17 Jul 2003 09:12:23 -0000 >@@ -1156,21 +1167,6 @@ > } > > /** >- Duplicate convert a string to lower case. >-**/ >- >-char *strdup_lower(const char *s) >-{ >- char *t = strdup(s); >- if (t == NULL) { >- DEBUG(0, ("strdup_lower: Out of memory!\n")); >- return NULL; >- } >- strlower_m(t); >- return t; >-} >- >-/** > Convert a string to upper case. > **/ > >@@ -1192,21 +1188,6 @@ > /* I assume that lowercased string takes the same number of bytes > * as source string even in multibyte encoding. (VIV) */ > unix_strupper(s,strlen(s)+1,s,strlen(s)+1); >-} >- >-/** >- Convert a string to upper case. >-**/ >- >-char *strdup_upper(const char *s) >-{ >- char *t = strdup(s); >- if (t == NULL) { >- DEBUG(0, ("strdup_upper: Out of memory!\n")); >- return NULL; >- } >- strupper_m(t); >- return t; > } > > /**
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 185
: 53