2.147.483.647 Problem

back4ever

SlotBauer
ID: 10467
L
20 April 2006
28.165
1.243
Hi

Habe bei einen meiner Slots das Problem
das sobald der Jackpot den "magischen Wert" 2.147.483.647 überschreitet
nichts mehr weiter gezählt wird.

Ich kann mich erinnern das ich das Problem schon vor Jahren
bei einer meiner Engine hatte, und ich dann auch einen Fix
irgendwie aufgetrieben habe..nur kann ich mich nicht mehr erinnern
wie ich das bewerkstelligt habe :(

Weis nicht ob das ein php oder Flash bzw. AS Problem ist.

Kann wer helfen ?

Danke
Mfg
 
Genau habe sowas auch gefunden
wenn ich nur wüsste wo ich das austauschen soll :roll:

Da heisst es Stück für Stück austauschen, erst die Variabe die zur Anzeige genutzt wird, dann Schritt für Schritt "rückwarts". und vor jedem Schritt sichern und nach jeder Änderung testen.
Und zwar alle.. nur so kannst Du Dir sicher sein, das dein Script "Gangnam-Style"-sicher ist.
 
Aber der verwundbare Code befindet sich doch im Flash selber, oder ist es etwa im PHP zu finden? Wäre für mich wichtig, weil ich ja auch eine Schnittstelle in mein Script schreibe, damit diese Slots PNP laufen
 
Das ist meist eher die Datenbank an für sich.
Hatte es noch bei keinem Slot erlebt, der dieses Feature hatte, das es an der PHP oder der Flash lag.
 
du hast einen klassischen Buffer overflow :p

integer besitzt 32 bit und damit hast du je nachdem ob du signed oder unsigned benutzt einen maximalen wert von 4294967296. Aber da du ja nur bis 2147483647 kommst und danach nix mehr läuft benutzt du signed int. somit hast du einen bereich von -2147483648 bis +2147483647 .
Unsigned Int hat einen bereich von 0 bis + 4294967296.
Aber da du ja anscheinend leicht über 2147483647 kommst würde ich an deiner stelle Long nutzen.
Mit unsigned long hast du einen Zahlenbereich von 0 bis 18446744073709551615. Mit signed long haste
dann von - 2^63 bis + (2^63)-1 ...
 
es lag an der DB
der korrekte sql.

CREATE TABLE `faceofanubis_config` (
`faktor_1` double(5,2) unsigned NOT NULL default '0.00',
`faktor_2` double(5,2) unsigned NOT NULL default '0.00',
`faktor_3` double(5,2) unsigned NOT NULL default '0.00',
`faktor_4` double(5,2) unsigned NOT NULL default '0.00',
`faktor_5` double(5,2) unsigned NOT NULL default '0.00',
`faktor_6` double(5,2) unsigned NOT NULL default '0.00',
`faktor_7` double(5,2) unsigned NOT NULL default '0.00',
`faktor_8` double(5,2) unsigned NOT NULL default '0.00',
`faktor_9` double(5,2) unsigned NOT NULL default '0.00',
`faktor_10` double(5,2) unsigned NOT NULL default '0.00',
`fs_2` int(10) NOT NULL default '0',
`fs_3` int(10) NOT NULL default '0',
`fs_4` int(10) NOT NULL default '0',
`fs_5` int(10) NOT NULL default '0',
`rest1` double(10,2) NOT NULL default '0.00',
`rest2` double(10,2) NOT NULL default '0.00',
`rest3` double(10,2) NOT NULL default '0.00',
`rest4` double(10,2) NOT NULL default '0.00',
`jp_start` int(10) NOT NULL default '0',
`jp_min` int(10) NOT NULL default '0',
`winout_anteil_1` double(10,2) NOT NULL default '0.00',
`winout_anteil_2` double(10,2) NOT NULL default '0.00',
`jp_anteil` double(10,2) NOT NULL default '0.00',
`doppelte_symbole` int(5) NOT NULL default '0'
) ;


INSERT INTO `faceofanubis_config` VALUES (0.00, 1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 1.00, 6.00, 1, 3, 5, 10, 0.30, 0.50, 1.00, 2.00, 1000000, 20000000, 45.00, 40.00, 10.00, 0);


CREATE TABLE `faceofanubis_games` (
`id` int(100) NOT NULL auto_increment,
`zeit` int(100) NOT NULL default '0',
`nickname` varchar(100) NOT NULL default 'kein',
`einsatz` int(10) NOT NULL default '0',
`gewinn` bigint(20) NOT NULL default '0',
`gewinn_l1` bigint(20) NOT NULL default '0',
`gewinn_l2` bigint(20) NOT NULL default '0',
`gewinn_l3` bigint(20) NOT NULL default '0',
`gewinn_l4` bigint(20) NOT NULL default '0',
`gewinn_l5` bigint(20) NOT NULL default '0',
`multi` int(10) NOT NULL default '0',
`jp_win` varchar(10) NOT NULL default 'N',
`jpgewinn` bigint(40) NOT NULL default '0',
`freispiele_ist` int(2) NOT NULL default '0',
`freispiele_win` int(1) NOT NULL default '0',
`buchungsid` varchar(255) NOT NULL default '',
`erg1` int(1) NOT NULL default '0',
`erg2` int(1) NOT NULL default '0',
`erg3` int(1) NOT NULL default '0',
`erg4` int(1) NOT NULL default '0',
`erg5` int(1) NOT NULL default '0',
`erg6` int(1) NOT NULL default '0',
`erg7` int(1) NOT NULL default '0',
`erg8` int(1) NOT NULL default '0',
`erg9` int(1) NOT NULL default '0',
`erg10` int(1) NOT NULL default '0',
`erg11` int(1) NOT NULL default '0',
`erg12` int(1) NOT NULL default '0',
`erg13` int(1) NOT NULL default '0',
`erg14` int(1) NOT NULL default '0',
`erg15` int(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ;




CREATE TABLE `faceofanubis_user` (
`userid` varchar(100) NOT NULL default '0',
`einsatz` int(10) NOT NULL default '5000',
`freispiele` int(2) NOT NULL default '0',
`multiplikator` int(5) NOT NULL default '0'
) ;



CREATE TABLE `faceofanubis_winout` (
`slotid` int(10) NOT NULL default '0',
`jackpot1` bigint(20) NOT NULL default '0',
`jackpot2` bigint(20) NOT NULL default '0',
`jackpot3` bigint(20) NOT NULL default '0',
`jackpot4` bigint(20) NOT NULL default '0',
`jackpot5` bigint(20) NOT NULL default '0',
`jackpot6` bigint(20) NOT NULL default '0',
`winout1` double(20,2) NOT NULL default '0.00',
`winout2` double(20,2) NOT NULL default '0.00',
`winout3` double(20,2) NOT NULL default '0.00',
`winout4` double(20,2) NOT NULL default '0.00',
`winout5` double(20,2) NOT NULL default '0.00',
`winout6` double(20,2) NOT NULL default '0.00',
`winout7` double(20,2) NOT NULL default '0.00',
`winout8` double(20,2) NOT NULL default '0.00',
`winout9` double(20,2) NOT NULL default '0.00',
`winout10` double(20,2) NOT NULL default '0.00',
`winout11` double(20,2) NOT NULL default '0.00',
`winout12` double(20,2) NOT NULL default '0.00',
KEY `slotid` (`slotid`)
) ;



INSERT INTO `faceofanubis_winout` VALUES (1, 1000000, 1000000, 1000000, 1000000, 1000000, 1000000, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00);
 
aber du weißt schon, dass die Nachricht nur ein Scherz war? ;)

Nur war es kein Scherz, Google bzw. Youtube verwendeten für die Anzeige signed int 32 Bit, was zu der maximalen, hier im Thread-Titel angeführten Anzahl führte.

Da Google, verständlicherweise, so etwas nicht von heute auf morgen ändern konnte, hatten Sie den Views-Zähler animiert.

Also nix mit Scherz. ;) Man könnte natürlich Fragen, warum signed int und nicht unsigned int. Wie das aber so ist, haben sich die Entwickler gedacht, 32-Bit ist genug... wird NIEEE erreicht. ;)
 
Also nix mit Scherz. ;) Man könnte natürlich Fragen, warum signed int und nicht unsigned int. Wie das aber so ist, haben sich die Entwickler gedacht, 32-Bit ist genug... wird NIEEE erreicht. ;)
https://zweinullig.de/gangnam-style/

Anfang 2013 wurde 1 Mrd. erreicht, meinst du nicht, dass innerhalb dieser fast 2 Jahre jemand auf die Idee gekommen wäre, wenns nicht schon vorher bedacht gewesen wäre?
 
https://zweinullig.de/gangnam-style/

Anfang 2013 wurde 1 Mrd. erreicht, meinst du nicht, dass innerhalb dieser fast 2 Jahre jemand auf die Idee gekommen wäre, wenns nicht schon vorher bedacht gewesen wäre?


https://www.newbloggerlab.com/2014/12/youtube-joked-about-gangnam-style-breaking-its-view-counter.html schrieb:
[...]and actually YouTube upgraded their integer type months ago to 64 bit.
[...]Lately, they observed that Psy is chasing the limit and could reach soon there. Before this happens, the engineers upgraded the variable to 64 bit.

Sie mögen vielleicht nach Änderung einen Joke darüber gemacht haben, tatsächlich haben sie vorher schon auf 64bit umgestellt gehabt.
 
der korrekte sql.
Das mit der 1NF müssen wir aber nochmal üben
rofl.gif

(scnr)