Public bug reported:
The offending line is line 624:
_curElem = (int **) malloc(num_sets * sizeof(int)); \
It should read:
_curElem = (int **) malloc(num_sets * sizeof(int*));
\
because the array being allocated is an array of int*, as shown by the
cast, not an array of int. On an x86 system, this is probably fine, but
on amd64, sizeof(int) != sizeof(int*).
This causes a crash in a program I wrote using python-pypoker-eval to
evaluate pre-flop odds in Texas Hold'em, but only when more than 2 hands
are passed to it.
The program (preflop_matchup.py):
#!/usr/bin/env python
import itertools
import sys
import pokereval
def matchup(hands):
pok = pokereval.PokerEval()
answer = pok.poker_eval(game='holdem',
pockets=hands,
board=['__', '__', '__', '__', '__'])
samples = float(answer['info'][0])
for hand, results in zip(hands, answer['eval']):
win_pct = results['scoop'] / samples * 100
tie_pct = results['tiehi'] / samples * 100
print '%s: %f%% to win, %f%% to tie' % (hand, win_pct, tie_pct)
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return itertools.izip_longest(fillvalue=fillvalue, *args)
def main(argv):
hands = []
for item in argv:
hand = list(''.join(x) for x in grouper(2, item))
if len(hand) != 2:
raise Exception('hands must contain two cards of 2 chars each!')
hands.append(hand)
matchup(hands)
if __name__ == '__main__':
main(sys.argv[1:])
To reproduce the crash, on an amd64 Ubuntu 10.4 LTS system:
python preflop_matchup.py 9h9s adjd jc7c
Correcting the offending line solves the problem. This may already be fixed
upstream, as the Ubuntu package is 1 revision out of date.
** Affects: poker-eval (Ubuntu)
Importance: Undecided
Status: New
--
/usr/include/poker-eval/enumerate.h incorrectly assumes
sizeof(int)==sizeof(int*)
https://bugs.launchpad.net/bugs/605737
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs