Check error returns on strnorm().
authorJeremy Allison <jra@samba.org>
Wed, 8 Aug 2012 22:49:34 +0000 (15:49 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 9 Aug 2012 19:07:32 +0000 (12:07 -0700)
source3/include/proto.h
source3/lib/util_str.c
source3/modules/vfs_prealloc.c
source3/smbd/filename.c

index bdb20bf8ffae1511554d00bbb63e929c1a72bc67..bfb9b37fd589066dc8d378737f75246b0a6e3a61 100644 (file)
@@ -662,7 +662,7 @@ ssize_t tstream_read_packet_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
 bool next_token(const char **ptr, char *buff, const char *sep, size_t bufsize);
 bool strnequal(const char *s1,const char *s2,size_t n);
 bool strcsequal(const char *s1,const char *s2);
-void strnorm(char *s, int case_default);
+bool strnorm(char *s, int case_default);
 char *push_skip_string(char *buf);
 char *skip_string(const char *base, size_t len, char *buf);
 size_t str_charnum(const char *s);
index b740de6659aebf591f7a28fa8c84b48e7eabe6b7..446838a0b9f3104730c4ed5d155dfccc59294abe 100644 (file)
@@ -55,12 +55,13 @@ bool strnequal(const char *s1,const char *s2,size_t n)
  Convert a string to "normal" form.
 **/
 
-void strnorm(char *s, int case_default)
+bool strnorm(char *s, int case_default)
 {
        if (case_default == CASE_UPPER)
-               (void)strupper_m(s); /* FIXME - return a bool here. */
+               return strupper_m(s);
        else
                strlower_m(s);
+       return true; /* FIXME - return strlower_m value later. */
 }
 
 /**
index f67cefbe2f3000d204bc423928fea2724f62ad1c..4ba27a6c8508cfb88c28622e8953e2e9c476bf02 100644 (file)
@@ -139,7 +139,9 @@ static int prealloc_open(vfs_handle_struct* handle,
        if (dot && *++dot) {
                if (strlen(dot) < sizeof(fext)) {
                        strncpy(fext, dot, sizeof(fext));
-                       strnorm(fext, CASE_LOWER);
+                       if (!strnorm(fext, CASE_LOWER)) {
+                               goto normal_open;
+                       }
                }
        }
 
index a4f9cd1bf6b4310cce07849bfe37d43479b11229..0be566f8975406fb6299d1f8ae55cec030062d79 100644 (file)
@@ -323,7 +323,11 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
 
        if (conn->case_sensitive && !conn->case_preserve &&
                        !conn->short_case_preserve) {
-               strnorm(smb_fname->base_name, lp_defaultcase(SNUM(conn)));
+               if (!strnorm(smb_fname->base_name, lp_defaultcase(SNUM(conn)))) {
+                       DEBUG(0, ("strnorm %s failed\n", smb_fname->base_name));
+                       status = NT_STATUS_INVALID_PARAMETER;
+                       goto err;
+               }
        }
 
        /*
@@ -740,8 +744,13 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
                                    (mangle_is_8_3(start, False,
                                                   conn->params) &&
                                                 !conn->short_case_preserve)) {
-                                       strnorm(start,
-                                               lp_defaultcase(SNUM(conn)));
+                                       if (!strnorm(start,
+                                                       lp_defaultcase(SNUM(conn)))) {
+                                               DEBUG(0, ("strnorm %s failed\n",
+                                                       start));
+                                               status = NT_STATUS_INVALID_PARAMETER;
+                                               goto err;
+                                       }
                                }
 
                                /*