Re: [Python-Dev] [Python-checkins] cpython (3.2): Fixes issue #8052: The posix subprocess module's close_fds behavior was

2012-01-22 Thread Gregory P. Smith
On Sat, Jan 21, 2012 at 4:21 PM, Benjamin Peterson benja...@python.org wrote:
 2012/1/21 gregory.p.smith python-check...@python.org:
 ...
 +/* Convert ASCII to a positive int, no libc call. no overflow. -1 on error. 
 */

 Is no libc call important?

Yes.  strtol() is not on the async signal safe C library function list.


 +static int _pos_int_from_ascii(char *name)

 To be consistent with the rest of posixmodule.c, static int should
 be on a different line from the signature. This also applies to all
 other function declarations added by this.

Python C style as a whole, yes.  This file already has a mix of same
line vs two line declarations, I added these following the style of
the functions immediately surrounding them.  Want a style fixup on the
whole file?


 +{
 +    int num = 0;
 +    while (*name = '0'  *name = '9') {
 +        num = num * 10 + (*name - '0');
 +        ++name;
 +    }
 +    if (*name)
 +        return -1;  /* Non digit found, not a number. */
 +    return num;
 +}
 +
 +
 +/* Returns 1 if there is a problem with fd_sequence, 0 otherwise. */
 +static int _sanity_check_python_fd_sequence(PyObject *fd_sequence)
 +{
 +    Py_ssize_t seq_idx, seq_len = PySequence_Length(fd_sequence);

 PySequence_Length can fail.

It has already been checked not to by the only entry point into the
code in this file.


 +    long prev_fd = -1;
 +    for (seq_idx = 0; seq_idx  seq_len; ++seq_idx) {
 +        PyObject* py_fd = PySequence_Fast_GET_ITEM(fd_sequence, seq_idx);
 +        long iter_fd = PyLong_AsLong(py_fd);
 +        if (iter_fd  0 || iter_fd  prev_fd || iter_fd  INT_MAX) {
 +            /* Negative, overflow, not a Long, unsorted, too big for a fd. 
 */
 +            return 1;
 +        }
 +    }
 +    return 0;
 +}
 +
 +
 +/* Is fd found in the sorted Python Sequence? */
 +static int _is_fd_in_sorted_fd_sequence(int fd, PyObject *fd_sequence)
 +{
 +    /* Binary search. */
 +    Py_ssize_t search_min = 0;
 +    Py_ssize_t search_max = PySequence_Length(fd_sequence) - 1;
 +    if (search_max  0)
 +        return 0;
 +    do {
 +        long middle = (search_min + search_max) / 2;
 +        long middle_fd = PyLong_AsLong(
 +                PySequence_Fast_GET_ITEM(fd_sequence, middle));

 No check for error?

_sanity_check_python_fd_sequence() already checked the entire list to
guarantee that there would not be any such error.

 +        if (fd == middle_fd)
 +            return 1;
 +        if (fd  middle_fd)
 +            search_min = middle + 1;
 +        else
 +            search_max = middle - 1;
 +    } while (search_min = search_max);
 +    return 0;
 +}

In general this is an extension module that is best viewed as a whole
including its existing comments rather than as a diff.

It contains code that will look odd in a diff because much of it
executes in a path where not much is allowed (post fork, pre exec) and
no useful way of responding to an error is possible so it attempts to
pre-check for any possible errors up front so that later code that is
unable to handle errors cannot possibly fail.

-gps
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Counting collisions for the win

2012-01-22 Thread Victor Stinner
 This seed is chosen randomly at runtime, but cannot
 change once chosen.

The hash is used to compare objects: if hash(obj1) != hash(obj2),
objects are considered different. So two strings must have the same
hash if their value is the same.

 Salt could also be an appropriate term here, but since salt is
 generally changed on a per-use basis (a single process may use many
 different salts), seed is more correct, since this value is only
 chosen once per process.

We may use a different salt per dictionary.

Victor
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] python build failed on mac

2012-01-22 Thread Michael Foord

On 21 Jan 2012, at 20:24, Vijay Majagaonkar wrote:

 
 On 2012-01-21, at 1:57 PM, Hynek Schlawack wrote:
 
 Am Freitag, 20. Januar 2012 um 23:40 schrieb Vijay Majagaonkar:
 I am trying to build python 3 on mac and build failing with following 
 error can somebody help me with this
 
 It is a known bug that Apple's latest gcc-llvm (that comes with Xcode 4.1 
 by default as gcc) miscompiles Python: http://bugs.python.org/issue13241 
 
 make clean
 CC=clang ./configure  make -s
 
 Thanks for the help, but above command need to run in different way
 
 ./configure CC=clang
 make
 
 
 I'm not sure why you think it needs to be that way, but it's fine by me as 
 both ways work fine.
 
 I am not sure, that was just try and worked for me, with first option 
 suggested by you was throwing same compile error then I tried with this that 
 worked :)


The problems compiling Python 3 on the Mac with XCode 4.1 have been reported 
and discussed here:

http://bugs.python.org/issue13241

This invocation worked for me:

./configure CC=gcc-4.2 --prefix=/dev/null --with-pydebug

All the best,

Michael Foord


 
 
 this allowed me to build the code but when ran test I got following error 
 message
 
 [363/364/3] test_io
 python.exe(11411) malloc: *** mmap(size=9223372036854775808) failed (error 
 code=12)
 *** error: can't allocate region
 *** set a breakpoint in malloc_error_break to debug
 python.exe(11411,0x7fff7a8ba960) malloc: *** mmap(size=9223372036854775808) 
 failed (error code=12)
 *** error: can't allocate region
 *** set a breakpoint in malloc_error_break to debug
 python.exe(11411,0x7fff7a8ba960) malloc: *** mmap(size=9223372036854775808) 
 failed (error code=12)
 *** error: can't allocate region
 *** set a breakpoint in malloc_error_break to debug
 
 I am using Mac OS-X 10.7.2 and insatlled Xcode 4.2.1 
 
 Please ensure there aren't any gcc-created objects left by running make 
 distclean first.
 
 I have tried this option too but still result is same, I have attached test 
 result if that will helps  mac_test.logand I will like to work on this if 
 you give me some guideline to look into this issue 
 
 
 Thanks for the help
 ;)___
 Python-Dev mailing list
 Python-Dev@python.org
 http://mail.python.org/mailman/listinfo/python-dev
 Unsubscribe: 
 http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk


--
http://www.voidspace.org.uk/


May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing 
http://www.sqlite.org/different.html





___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] python build failed on mac

2012-01-22 Thread Łukasz Langa
Wiadomość napisana przez Michael Foord w dniu 22 sty 2012, o godz. 14:14:

   ./configure CC=gcc-4.2 --prefix=/dev/null --with-pydebug

Why the phony prefix?

-- 
Best regards,
Łukasz Langa
Senior Systems Architecture Engineer

IT Infrastructure Department
Grupa Allegro Sp. z o.o.

Pomyśl o środowisku naturalnym zanim wydrukujesz tę wiadomość!
Please consider the environment before printing out this e-mail.

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] python build failed on mac

2012-01-22 Thread Michael Foord

On 22 Jan 2012, at 17:43, Łukasz Langa wrote:

 Wiadomość napisana przez Michael Foord w dniu 22 sty 2012, o godz. 14:14:
 
  ./configure CC=gcc-4.2 --prefix=/dev/null --with-pydebug
 
 Why the phony prefix?


Heh, it's what I've always done - I think copied from other developers. 

The dev guide suggests it:

http://docs.python.org/devguide/setup.html#unix

There is normally no need to install your built copy of Python! The interpreter 
will realize where it is being run from and thus use the files found in the 
working copy. If you are worried you might accidentally install your working 
copy build, you can add --prefix=/dev/null to the configuration step.

Not that this is particularly a worry for me...

All the best,

Michael

 
 -- 
 Best regards,
 Łukasz Langa
 Senior Systems Architecture Engineer
 
 IT Infrastructure Department
 Grupa Allegro Sp. z o.o.
 
 Pomyśl o środowisku naturalnym zanim wydrukujesz tę wiadomość!
 Please consider the environment before printing out this e-mail.
 
 


--
http://www.voidspace.org.uk/


May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing 
http://www.sqlite.org/different.html





___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Counting collisions for the win

2012-01-22 Thread Lennart Regebro
On Sun, Jan 22, 2012 at 11:11, Victor Stinner
victor.stin...@haypocalc.com wrote:
 This seed is chosen randomly at runtime, but cannot
 change once chosen.

 The hash is used to compare objects: if hash(obj1) != hash(obj2),
 objects are considered different. So two strings must have the same
 hash if their value is the same.

 Salt could also be an appropriate term here, but since salt is
 generally changed on a per-use basis (a single process may use many
 different salts), seed is more correct, since this value is only
 chosen once per process.

 We may use a different salt per dictionary.

Can we do that? I was thinking of ways to not raise errors when we get
over a collision count, but instead somehow change the way the
dictionary behaves when we get over the collision count, but I
couldn't come up with something. Somehow adding a salt would be one
possibility. But I don't see how it's doable except for the
string-keys only case mentioned before.

But I might just be lacking imagination. :-)

//Lennart
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Counting collisions for the win

2012-01-22 Thread Antoine Pitrou

I think this thread is approaching the recursion limit.
Be careful not to blow the stack :)

Regards

Antoine.


On Sun, 22 Jan 2012 20:53:41 +0100
Lennart Regebro rege...@gmail.com wrote:
 On Sun, Jan 22, 2012 at 11:11, Victor Stinner
 victor.stin...@haypocalc.com wrote:
  This seed is chosen randomly at runtime, but cannot
  change once chosen.
 
  The hash is used to compare objects: if hash(obj1) != hash(obj2),
  objects are considered different. So two strings must have the same
  hash if their value is the same.
 
  Salt could also be an appropriate term here, but since salt is
  generally changed on a per-use basis (a single process may use many
  different salts), seed is more correct, since this value is only
  chosen once per process.
 
  We may use a different salt per dictionary.
 
 Can we do that? I was thinking of ways to not raise errors when we get
 over a collision count, but instead somehow change the way the
 dictionary behaves when we get over the collision count, but I
 couldn't come up with something. Somehow adding a salt would be one
 possibility. But I don't see how it's doable except for the
 string-keys only case mentioned before.
 
 But I might just be lacking imagination. :-)
 
 //Lennart


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Counting collisions for the win

2012-01-22 Thread Paul McMillan
 We may use a different salt per dictionary.

If we're willing to re-hash everything on a per-dictionary basis. That
doesn't seem reasonable given our existing usage.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Counting collisions for the win

2012-01-22 Thread Lennart Regebro
On Mon, Jan 23, 2012 at 06:02, Paul McMillan p...@mcmillan.ws wrote:
 We may use a different salt per dictionary.

 If we're willing to re-hash everything on a per-dictionary basis. That
 doesn't seem reasonable given our existing usage.

Well, if we get crazy amounts of collisions, re-hashing with a new
salt to get rid of those collisions seems quite reasonable to me...

//Lennart
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Counting collisions for the win

2012-01-22 Thread Stephen J. Turnbull
Lennart Regebro writes:
  On Mon, Jan 23, 2012 at 06:02, Paul McMillan p...@mcmillan.ws wrote:
   We may use a different salt per dictionary.
  
   If we're willing to re-hash everything on a per-dictionary basis. That
   doesn't seem reasonable given our existing usage.
  
  Well, if we get crazy amounts of collisions, re-hashing with a new
  salt to get rid of those collisions seems quite reasonable to me...

But doesn't the whole idea of a hash table fall flat on its face if
you need to worry about crazy amounts of collisions (outside of
deliberate attacks)?

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Counting collisions for the win

2012-01-22 Thread Tim Delaney
On 23 January 2012 16:49, Lennart Regebro rege...@gmail.com wrote:

 On Mon, Jan 23, 2012 at 06:02, Paul McMillan p...@mcmillan.ws wrote:
  We may use a different salt per dictionary.
 
  If we're willing to re-hash everything on a per-dictionary basis. That
  doesn't seem reasonable given our existing usage.

 Well, if we get crazy amounts of collisions, re-hashing with a new
 salt to get rid of those collisions seems quite reasonable to me...


Actually, this looks like it has the seed of a solution in it. I haven't
scrutinised the following beyond it sounds like it could work - it could
well contain nasty flaws.

Assumption: We only get an excessive number of collisions during an attack
(directly or indirectly).
Assumption: Introducing a salt into hashes will change those hashes
sufficiently to mitigate the attack (all discussion of randomising hashes
makes this assumption).

1. Keep the current hashing (for all dictionaries) i.e. just using
hash(key).

2. Count collisions.

3. If any key hits X collisions change that dictionary to use a random salt
for hashes (at least for str and unicode keys). This salt would be
remembered for the dictionary.

Consequence: The dictionary would need to be rebuilt when an attack was
detected.
Consequence: Hash caching would no longer occur for this dictionary, making
most operations more expensive.
Consequence: Anything relying on the iteration order of a dictionary which
has suffered excessive conflicts would fail.

4. (Optional) in 3.3, provide a way to get a dictionary with random salt
(i.e. not wait for attack).

Tim Delaney
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com