strlen to mb_strlen with ASCII charset to avoid binary string wrong length calculation
[brisk.git] / web / briskin5 / Obj / briskin5.phh
index 2995972..718fabd 100644 (file)
@@ -533,7 +533,7 @@ class Bin5_user extends User {
                 break;
             if (($s = fread($fp, 8)) == FALSE)
                 break;
-            if (strlen($s) != 8)
+            if (mb_strlen($s, "ASCII") != 8)
                 break;
             $arr = unpack('Ls/Li', $s);
             fclose($fp);
@@ -609,6 +609,19 @@ class Bin5_user extends User {
                         log_only(serialize($user));
                     }
                 }
+                else {
+                    if ($sess != FALSE) {
+                        // This part isn't strictly required but is good to verify
+                        // the coerence of cached and User class saved value of step field.
+                        $old_step = $user->step;
+                        $arr = Bin5_user::load_step($sess);
+                        $user->step = $arr['s'];
+                        if ($old_step != $user->step) {
+                            log_crit("Bin5:: steps are diffetents User->step ".$user->step." Old_step: ".$old_step);
+                        }
+
+                    }
+                }
                 
                 $user->shm_sz = $shm_sz;
                 
@@ -643,6 +656,7 @@ class Bin5_user extends User {
           // log_only("PUT_VAR DI ".strlen(serialize($user)));
           if (shm_put_var($shm, $tok, $user) != FALSE) {
               shm_detach($shm);
+              $user->save_step();
               log_main("User[".$id."] saved.");
               return (TRUE);
           }
@@ -1144,7 +1158,7 @@ class Bin5 {
               break;
           if (($s = fread($fp, 4)) == FALSE)
               break;
-          if (strlen($s) != 4)
+          if (mb_strlen($s, "ASCII") != 4)
               break;
           $arr = unpack('Le', $s);
           if ($arr['e'] > $tm)