The branch, v3-0-test has been updated
       via  db905d9c4248c0051266ef0995dce077c1a33dd3 (commit)
      from  7ff5a123b4fd80d66da92f34062174573a4f9725 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-0-test


- Log -----------------------------------------------------------------
commit db905d9c4248c0051266ef0995dce077c1a33dd3
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Tue Jan 22 11:54:31 2008 +0100

    Copy the 3.2 version of string_replace to 3.0
    
    There are several callers in 3.0 that don't give a pstring to 
string_replace,
    thus it will end up in segfaults like the one reported by Sergio Pires
    <[EMAIL PROTECTED]> on [EMAIL PROTECTED] The 3.2 version of string_replace
    does not have the pstring assumption anymore.
    
    Jeremy, Jerry, please check!
    
    Thanks,
    
    Volker

-----------------------------------------------------------------------

Summary of changes:
 source/lib/util_str.c |   24 +++++++++++++++++++-----
 1 files changed, 19 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/util_str.c b/source/lib/util_str.c
index 52cdbfc..b734495 100644
--- a/source/lib/util_str.c
+++ b/source/lib/util_str.c
@@ -394,7 +394,11 @@ BOOL strisnormal(const char *s, int case_default)
  NOTE: oldc and newc must be 7 bit characters
 **/
 
-void string_replace( pstring s, char oldc, char newc )
+/**
+ String replace.
+ NOTE: oldc and newc must be 7 bit characters
+**/
+void string_replace( char *s, char oldc, char newc )
 {
        char *p;
 
@@ -406,8 +410,9 @@ void string_replace( pstring s, char oldc, char newc )
        for (p = s; *p; p++) {
                if (*p & 0x80) /* mb string - slow path. */
                        break;
-               if (*p == oldc)
+               if (*p == oldc) {
                        *p = newc;
+               }
        }
 
        if (!*p)
@@ -418,9 +423,18 @@ void string_replace( pstring s, char oldc, char newc )
        /* With compose characters we must restart from the beginning. JRA. */
        p = s;
 #endif
-       push_ucs2(NULL, tmpbuf, p, sizeof(tmpbuf), STR_TERMINATE);
-       string_replace_w(tmpbuf, UCS2_CHAR(oldc), UCS2_CHAR(newc));
-       pull_ucs2(NULL, p, tmpbuf, -1, sizeof(tmpbuf), STR_TERMINATE);
+
+       while (*p) {
+               size_t c_size;
+               next_codepoint(p, &c_size);
+
+               if (c_size == 1) {
+                       if (*p == oldc) {
+                               *p = newc;
+                       }
+               }
+               p += c_size;
+       }
 }
 
 /**


-- 
Samba Shared Repository

Reply via email to