Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision dcab2b89

Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt

  • ID dcab2b89a7ffeabf3f5360366ea7d94ffe564f9d
  • Vorgänger 51b812b1
  • Nachfolger 3e209ee0

update_business und update_defaults: Bei sehr langen Zahlenkomponenten wurden die erzeugten Nummern leider auf -0000000...001 gesetzt. Grund ist, dass der Formatierer '%d' für sprintf auf 32bit-Systemen nun mal nur mit 32bit-Zahlen umgehen kann. Geriet die Zahlenkomponente größer als 2147483647, so erhielt man einen Überlauf.

Unterschiede anzeigen:

SL/Form.pm
2648 2648
  my ($var) = $sth->fetchrow_array;
2649 2649
  $sth->finish;
2650 2650

  
2651
  $var =~ s/\d+$/ sprintf '%0*d', length($&), $&+1 /e;
2652
  $var ||= 1;
2651
  if ($var =~ m/\d+$/) {
2652
    my $new_var  = (substr $var, $-[0]) * 1 + 1;
2653
    my $len_diff = length($var) - $-[0] - length($new_var);
2654
    $var         = substr($var, 0, $-[0]) . ($len_diff > 0 ? '0' x $len_diff : '') . $new_var;
2655

  
2656
  } else {
2657
    $var = $var . '1';
2658
  }
2653 2659

  
2654 2660
  $query = qq|UPDATE defaults SET $fld = ?|;
2655 2661
  do_query($self, $dbh, $query, $var);
......
2680 2686
       WHERE id = ? FOR UPDATE|;
2681 2687
  my ($var) = selectrow_query($self, $dbh, $query, $business_id);
2682 2688

  
2683
  $var =~ s/\d+$/ sprintf '%0*d', length($&), $&+1 /e;
2684
  
2689
  if ($var =~ m/\d+$/) {
2690
    my $new_var  = (substr $var, $-[0]) * 1 + 1;
2691
    my $len_diff = length($var) - $-[0] - length($new_var);
2692
    $var         = substr($var, 0, $-[0]) . ($len_diff > 0 ? '0' x $len_diff : '') . $new_var;
2693

  
2694
  } else {
2695
    $var = $var . '1';
2696
  }
2697

  
2685 2698
  $query = qq|UPDATE business
2686 2699
              SET customernumberinit = ?
2687 2700
              WHERE id = ?|;

Auch abrufbar als: Unified diff