]> git.vpit.fr Git - perl/modules/Scalar-Vec-Util.git/blobdiff - lib/Scalar/Vec/Util.pm
Fix shifting more bits than the length of the window
[perl/modules/Scalar-Vec-Util.git] / lib / Scalar / Vec / Util.pm
index 12d049c26364708fa28e59b337745040da53e5e4..b5a8080e7f235a1cde6ca7693f59dd9547d92af0 100644 (file)
@@ -132,14 +132,17 @@ sub vshift {
   $left = 0;
   $bits = -$bits;
  }
- $bits    = $length if $bits > $length;
- $length -= $bits;
- if ($left) {
-  vcopy($_[0], $start, $_[0], $start + $bits, $length);
-  vfill($_[0], $start, $bits, $insert) if defined $insert;
+ if ($bits < $length) {
+  $length -= $bits;
+  if ($left) {
+   vcopy($_[0], $start, $_[0], $start + $bits, $length);
+   vfill($_[0], $start, $bits, $insert) if defined $insert;
+  } else {
+   vcopy($_[0], $start + $bits, $_[0], $start, $length);
+   vfill($_[0], $start + $length, $bits, $insert) if defined $insert;
+  }
  } else {
-  vcopy($_[0], $start + $bits, $_[0], $start, $length);
-  vfill($_[0], $start + $length, $bits, $insert) if defined $insert;
+  vfill($_[0], $start, $length, $insert) if defined $insert;
  }
 }