[issue21520] Erroneous zipfile test failure if the string 'bad' appears in pwd

2014-05-18 Thread Georg Brandl

Changes by Georg Brandl :


--
nosy: +georg.brandl

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21521] Tkinter + OSX + Spaces : Multiple file dialogues created

2014-05-18 Thread rovf

New submission from rovf:

I'm running this on OSX 10.6 (SnowLeopard) with the OSX "Spaces" feature 
enabled (i.e. several virtual desktops).

This is my (complete) program:

from tkinter.filedialog import asksaveasfilename
pathname=asksaveasfilename(initialdir='.',title='gaga')

This has the following odd behaviours:

- The file dialogue opens, but when I switch to another space, the file 
dialogue is open there too, as a *separate* file dialogue. I.e., when I go back 
to the original space, select a file and exit the dialogue, my program 
continues running (for instance, when called from an interactive python shell, 
I get the prompt again), but on the other space, the dialogue is still open.

- I also noticed that the parameter initialdir='.' is NOT honoured, i.e. the 
file dialogue starts on the topmost directory.

BTW, the same behaviour is also in Python 2.6.

--
components: Tkinter
messages: 218736
nosy: rovf
priority: normal
severity: normal
status: open
title: Tkinter + OSX + Spaces : Multiple file dialogues created
type: behavior
versions: Python 3.4

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21521] Tkinter + OSX + Spaces : Multiple file dialogues created

2014-05-18 Thread Ned Deily

Changes by Ned Deily :


--
nosy: +ned.deily

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21430] Document ssl.pending()

2014-05-18 Thread Antoine Pitrou

Antoine Pitrou added the comment:

I'm not intending to document the pending() method. Apparently the only people 
wanting to use it are/were confused about how exactly to write non-blocking SSL 
code, which is not a good hint.

--
resolution:  -> wont fix
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21515] Use Linux O_TMPFILE flag in tempfile.TemporaryFile?

2014-05-18 Thread STINNER Victor

STINNER Victor added the comment:

tempfile_o_tmpfile2.patch: Updated patch to handle OS errors.

I'm not sure that __O_TMPFILE has the same value on all architectures.

The O_TMPFILE flag was added to fcntl.h in the glibc 2.19 (released the 8 Feb 
2014):
https://sourceware.org/git/?p=glibc.git;a=commit;h=ffdd31816a67f48697ea4d6b852e58d2886d42ca

My Linux Fedora 20 uses the glibc 2.18.

I removed the hardcoded constant from my patch. Add this to Lib/tempfile.py to 
test manually if you have a glibc older than 2.19:

# after "if hasattr(_os, 'O_TMPFILE'):"
elif _sys.platform == 'linux':
__O_TMPFILE = 0o2000
_O_TMPFILE = (__O_TMPFILE | _os.O_DIRECTORY)

--
Added file: http://bugs.python.org/file35276/tempfile_o_tmpfile2.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21515] Use Linux O_TMPFILE flag in tempfile.TemporaryFile?

2014-05-18 Thread STINNER Victor

Changes by STINNER Victor :


Removed file: http://bugs.python.org/file35276/tempfile_o_tmpfile2.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21515] Use Linux O_TMPFILE flag in tempfile.TemporaryFile?

2014-05-18 Thread STINNER Victor

STINNER Victor added the comment:

(Oops, I made a mistake, the hardcoded constant was still present in my patch 
2.)

Patch 3 uses tempfile._O_TMPFILE_WORKS variable to check if the O_TMPFILE flag 
is avaialble and works.

Use "os.O_TMPFILE = 0o2000 | os.O_DIRECTORY" to try my patch with glibc 
older than 2.19.

--
Added file: http://bugs.python.org/file35277/tempfile_o_tmpfile3.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue13916] disallow the "surrogatepass" handler for non utf-* encodings

2014-05-18 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

I have no opinion.

--
assignee: serhiy.storchaka -> 

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21522] Add more tkinter tests

2014-05-18 Thread Serhiy Storchaka

New submission from Serhiy Storchaka:

Here is a patch which adds tests for Listbox.itemconfigure(), 
PanedWindow.paneconfigure() and several tests for Menu.entryconfigure().

--
assignee: serhiy.storchaka
components: Tests, Tkinter
files: test_tkinter_configure.patch
keywords: patch
messages: 218741
nosy: serhiy.storchaka
priority: normal
severity: normal
stage: patch review
status: open
title: Add more tkinter tests
type: enhancement
versions: Python 2.7, Python 3.4, Python 3.5
Added file: http://bugs.python.org/file35278/test_tkinter_configure.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21523] quadratic-time compilation in the number of 'and' or 'or' expressions

2014-05-18 Thread Andrew Dalke

New submission from Andrew Dalke:

Python's compiler has quadratic-time time behavior based on the number of "and" 
or "or" expressions. A profile shows that stackdepth_walk is calling itself in 
a stack at least 512 levels deep. (My profiler doesn't go higher than that.)

I've reduced it to a simple test case. Compiling functions of the form

def f(x):
x * x  # Repeat N times

takes linear time in the number of lines N, while functions of the form

def g(x):
x and x  # Repeat N times

takes quadratic time in N. Here's an example of running the attached 
demonstration code on a fresh build of Python from version control:

Results from 3.5.0a0 (default:de01f7c37b53, May 18 2014, 13:18:43)  

  numusing  using
 tests'*'   'and'
   100   0.002  0.002
   200   0.003  0.004
   400   0.005  0.010
   800   0.012  0.040
  1600   0.023  0.133
  3200   0.042  0.906
  6400   0.089  5.871
 12800   0.188  27.581
 25600   0.404  120.800

The same behavior occurs when I replace 'and' with 'or'.

The same behavior also occurs under Python 2.7.2, 3.3.5, 3.4.0. (I don't have 
builds of 3.1 or 3.2 for testing.)

However, the demonstration code shows linear time under Python 2.6.6:

Results from 2.6.6 (r266:84374, Aug 31 2010, 11:00:51)  

  numusing  using
 tests'*'   'and'
   100   0.003  0.001
   200   0.002  0.002
   400   0.006  0.008
   800   0.010  0.010
  1600   0.019  0.022
  3200   0.039  0.045
  6400   0.085  0.098
 12800   0.176  0.203
 25600   0.359  0.423
 51200   0.726  0.839

I came across this problem because my code imports a large machine-generated 
module. It was originally written for Python 2.6, where it worked just fine. 
When I tried to import it under new Pythons, the import appeared to hang, and I 
killed it after a minute or so.

As a work-around, I have re-written the code generator to use chained 
if-statements instead of the short-circuit and operator.

--
components: Interpreter Core
files: quadratic_shortcircuit_compilation.py
messages: 218742
nosy: dalke
priority: normal
severity: normal
status: open
title: quadratic-time compilation in the number of 'and' or 'or' expressions
type: performance
versions: Python 2.7, Python 3.3, Python 3.4, Python 3.5
Added file: 
http://bugs.python.org/file35279/quadratic_shortcircuit_compilation.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21524] Allowing to pass pathlib.Path object in mimetypes.guess_type function

2014-05-18 Thread jorispilot

Changes by jorispilot :


--
components: Library (Lib)
nosy: jorispilot
priority: normal
severity: normal
status: open
title: Allowing to pass pathlib.Path object in mimetypes.guess_type function
type: enhancement
versions: Python 3.4

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue16840] Tkinter doesn't support large integers

2014-05-18 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

Patch synchronized with tip and fixed support of Tcl <8.5.

--
Added file: http://bugs.python.org/file35280/tkinter_bignum_3.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21386] ipaddress.IPv4Address.is_global not implemented

2014-05-18 Thread Roger Luethi

Roger Luethi added the comment:

New patch includes tests.

Lightly tested with Python 3.4 (because trunk doesn't build for me right now): 
tests fail without patch, pass with patch.

Patch re-diffed against trunk.

--
Added file: http://bugs.python.org/file35281/ipv4addr_global2-hg.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21430] Document ssl.pending()

2014-05-18 Thread Bas Wijnen

Bas Wijnen added the comment:

Alexey: please be more civil.

Antoine: In that case, can you please explain how you would recommend me to 
implement my use case, where most of my calls are master-initiated and 
blocking, but some slave-initiated events must be non-blocking?  Should I make 
a lot of calls to sslsocket.setblocking() to switch it on and off all the time? 
 AFAIK that is a system call (or isn't it?); while that won't make any real 
difference in performance in Python, it doesn't feel right to make system calls 
when there's technically no need for it.

Also, as I suggested previously, if you don't document the method, could you 
please add the word "pending" somewhere in the text?  This ensures people 
looking for documentation of what they see in the source will find this 
explanation.  It may also be good to add a note to the source code that this 
function should not be used.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21520] Erroneous zipfile test failure if the string 'bad' appears in pwd

2014-05-18 Thread Larry Hastings

Larry Hastings added the comment:

Here's an eye-wateringly-thorough description of the bug for the sake of 
posterity.

The test code in question is test_write_filtered_python_package() in 
Lib/test/test_zipfile.py.   This function uses PyZipFile to build a zipfile 
from the contents of the "Lib/test" directory.  PyZipFile scans for .py files, 
then compiles them into .pyc or .pyo files and adds the compiled result.

The test code actually reuses the PyZipFile object three times:

The first try succeeds, but raises some warnings because of some deliberately 
troublesome files in that directory that upset the compiler.  These files all 
contain the substring "bad" in their name, like "Lib/test/bad_coding.py".  The 
warnings are written to stdout; the test captures stdout and scans for the 
errors.  When this function is done, the zipfile contains .pyc files of all the 
files in Lib/test except for the ones with the substring "bad" in their name.

The second try succeeds, but ignores every file because of a "filterfunc" 
passed in that always returns False.  It's effectively a no-op--no files are 
added to the zipfile.  The test then scans the output to make sure no warnings 
were issued.

The third try succeeds.  It uses the "filterfunc" parameter to selectively skip 
the "bad" files, then scans stdout to ensure that no warnings were issued 
there.  However, since it's re-adding all the other files to the zipfile, this 
does issue a zillion UserWarning assert warnings.  The code suppresses these 
with a "self.assertWarns(UserWarning)" context manager.

So here's the bug.  If you untarred Python into "/tmp/goodidea", then the test 
works as expected.  But if you untar Python into "/tmp/badidea", then the 
filterfunc in the third test ignores *every* file, because *every* file 
contains the substring "bad".  Therefore it never adds a single file.  And 
therefore it never fires the UserWarning about redundantly adding a file.  
Since UserWarning is never issued, and the test is supposed to issue it, the 
assertWarns context manager flags the test as a failure.

The easy fix: change the filterfunc to be far more selective, only filtering 
out paths containing the substring "Lib/test/bad".  This would still fail if 
you untarred Python to "/tmp/Lib/test/bad/", but hopefully nobody will do 
*that*.

Perhaps a still-better approach would be 
  lambda path: os.path.basename(path).startswith("bad")

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21525] Accept lists in Tkinter

2014-05-18 Thread Serhiy Storchaka

New submission from Serhiy Storchaka:

There is very common error when user pass list instead tuple to Tkinter. Some 
functions accept both tuple and list, some functions reject list, but many 
functions silently convert non-tuple value to str (e.g. [1, 2] -> '[1, 2]' 
instead of expected Tcl representation '{1 2}'). The proposed patch adds 
support of Python lists in all Tkinter functions which accept tuples.

--
assignee: serhiy.storchaka
components: Tkinter
files: tkinter_accept_lists.patch
keywords: patch
messages: 218747
nosy: gpolo, loewis, serhiy.storchaka, terry.reedy
priority: normal
severity: normal
stage: patch review
status: open
title: Accept lists in Tkinter
type: enhancement
versions: Python 3.5
Added file: http://bugs.python.org/file35282/tkinter_accept_lists.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue16840] Tkinter doesn't support large integers

2014-05-18 Thread Serhiy Storchaka

Changes by Serhiy Storchaka :


--
nosy: +loewis

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21495] Sane default for logging config

2014-05-18 Thread Thomas Guettler

Thomas Guettler added the comment:

Just for the record.

Here are the discussions about this topic on the python-ideas mailing list:


https://mail.python.org/pipermail/python-ideas/2014-May/027839.html

https://mail.python.org/pipermail/python-ideas/2014-May/027858.html

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17994] Change necessary in platform.py to support IronPython

2014-05-18 Thread Ian Cordasco

Ian Cordasco added the comment:

I missed the fact that the user gave me the information from sys.version: 
https://stackoverflow.com/questions/16545027/ironpython-error-in-url-request?noredirect=1#comment23847257_16545027

I'll throw together a failing test with this and run it against 2.7, and the 
3.x branches.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue9673] Entry Widget Not Editable under Windows XP

2014-05-18 Thread Serhiy Storchaka

Changes by Serhiy Storchaka :


--
nosy: +terry.reedy

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21145] Add the @cached_property decorator

2014-05-18 Thread Daniel Greenfeld

Daniel Greenfeld added the comment:

For what it's worth, I just released cached-property on PyPI and someone 
suggested I join the discussion here. 

Package: https://pypi.python.org/pypi/cached-property
Repo: https://github.com/pydanny/cached-property

Notes:

* 92% test coverage, albeit with a simple, arguably naive test.
* I plan to increase the coverage to 100%.
* I'm not entirely sure where to give credit for the original implementation. 
Right now I think it's Bottle, but I'm not certain. See  
https://github.com/pydanny/cached-property/issues/1

--
nosy: +pydanny

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21523] quadratic-time compilation in the number of 'and' or 'or' expressions

2014-05-18 Thread Antoine Pitrou

Changes by Antoine Pitrou :


--
nosy: +benjamin.peterson, brett.cannon, georg.brandl, ncoghlan

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21520] Erroneous zipfile test failure if the string 'bad' appears in pwd

2014-05-18 Thread Ned Deily

Ned Deily added the comment:

Testing for "Lib/test/bad" isn't correct either since the test will fail when 
the tests are run from an installed Python rather than just from a build 
directory.

--
nosy: +ned.deily

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19866] tests aifc, sunau and wave failures on a fresh Win64 installation

2014-05-18 Thread Steve Dower

Steve Dower added the comment:

I noticed the same thing testing the 2.7.7rc1 installer, so I've got a fix for 
2.7.7. The same issue exists for imghdrdata (which was added quite recently, it 
seems).

Patch attached - any concerns?

--
keywords: +patch
nosy: +benjamin.peterson, steve.dower
Added file: http://bugs.python.org/file35283/testdata.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19866] tests aifc, sunau and wave failures on a fresh Win64 installation

2014-05-18 Thread Steve Dower

Steve Dower added the comment:

FWIW, the installers are about 130kb larger with the files included.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21507] memory used by frozenset created from set differs from that of frozenset created from other iterable

2014-05-18 Thread STINNER Victor

STINNER Victor added the comment:

I restore the original title, my title was a mistake.

--
title: set and frozenset constructor should use operator.length_hint to guess 
the size of the iterator -> memory used by frozenset created from set differs 
from that of frozenset created from other iterable

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21526] Support new booleans in Tkinter

2014-05-18 Thread Serhiy Storchaka

New submission from Serhiy Storchaka:

Recent Tcl versions (since 8.5) no longer use internal "boolean" type. Instead 
they use "booleanString" type (but looks as only internally). Here is a patch 
which add support for "booleanString" Tcl type in case when it leaks to user. 
There are no any new tests because there is no simple way (if any) to create 
pure Tcl boolean object.

--
assignee: serhiy.storchaka
components: Tkinter
files: tkinter_newboolean.patch
keywords: patch
messages: 218755
nosy: gpolo, loewis, serhiy.storchaka
priority: normal
severity: normal
stage: patch review
status: open
title: Support new booleans in Tkinter
type: enhancement
versions: Python 3.5
Added file: http://bugs.python.org/file35284/tkinter_newboolean.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue20483] Missing network resource checks in test_urllib2 & test_smtplib

2014-05-18 Thread Berker Peksag

Berker Peksag added the comment:

I couldn't reproduce it either. I also tried related urllib and urllib2 tests:
- test_urllib (passed)
- test_urllibnet (skipped - Use of the 'network' resource not enabled)
- test_urllib_response (passed)
- test_urllib2net (skipped - Use of the 'network' resource not enabled)
- test_urllib2_localnet (passed)

--
nosy: +berker.peksag

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21518] Expose RegUnloadKey in winreg

2014-05-18 Thread Claudiu.Popa

Claudiu.Popa added the comment:

This version of the patch skips the test if the privileges can't be acquired.

--
Added file: http://bugs.python.org/file35285/issue21518.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21518] Expose RegUnloadKey in winreg

2014-05-18 Thread eryksun

eryksun added the comment:

ctypes LibraryLoader instances cache CDLL/WinDLL instances, which cache 
function pointers. Using the global ctypes.cdll and ctypes.windll loaders can 
lead to conflicting definitions for restype, argtypes, and errcheck. I suggest 
using a private LibraryLoader in windows_helper, e.g.:

windll = ctypes.LibraryLoader(ctypes.WinDLL)

--
nosy: +eryksun

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue20383] Add a keyword-only spec argument to types.ModuleType

2014-05-18 Thread Brett Cannon

Brett Cannon added the comment:

Here is an implementation of importlib.util.module_from_spec(). With this it 
makes PEP 451 conceptually work like:

  spec = importlib.util.find_spec(name)
  module = importlib.util.module_from_spec(spec)
  spec.loader.exec_module(module)

About the only other thing I can think of that people might still want is 
something like `importlib.util.load(spec)` so that they don't even need to care 
about whether load_module() or exec_module() is defined, but that can be a 
separate issue if it turns out people actually want something like that.

--
keywords: +patch
stage: test needed -> commit review
Added file: http://bugs.python.org/file35286/module_from_spec.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21145] Add the @cached_property decorator

2014-05-18 Thread Antoine Pitrou

Antoine Pitrou added the comment:

Does this work for you?

>>> class X:
...   @property
...   @functools.lru_cache(None)
...   def get_x(self):
... print("computing")
... return 5
... 
>>> x = X()
>>> x.get_x
computing
5
>>> x.get_x
5

--
nosy: +pitrou, serhiy.storchaka

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21145] Add the @cached_property decorator

2014-05-18 Thread Alex Gaynor

Alex Gaynor added the comment:

Will that implementation cause a memory leak? Won't the lru_cache have a dict 
mapping {self: result}, meaning that `self` will live forever, instead of 
storing result in self.__dict__, where the lifetimes are correct.

--
nosy: +alex

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21145] Add the @cached_property decorator

2014-05-18 Thread Antoine Pitrou

Antoine Pitrou added the comment:

> Will that implementation cause a memory leak? Won't the lru_cache have
> a dict mapping {self: result}, meaning that `self` will live forever,
> instead of storing result in self.__dict__, where the lifetimes are
> correct.

Oh, you're right. Sorry for the noise.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21527] concurrent.futures.ThreadPoolExecutor does not use a default value

2014-05-18 Thread Claudiu.Popa

New submission from Claudiu.Popa:

As the title says, ThreadPoolExecutor does not use a default value for 
max_workers parameter, as ProcessPoolExecutor does. When the user does not care 
about the number of workers and wants only for something to run in background, 
he has to write code like this:

if processes:
   executor = ProcessPoolExecutor()
elif threads:
   executor = ThreadPoolExecutor(1) # or any other value

This situation can also occur when the class is passed as a factory function:

def create_pool(executor_factory):
   if executor_factory is process pool:
   executor = executor_factory()
   else:
   executor = executor_factory(1)

This patch proposes using the number of cores as the default value for 
max_workers.
For instance, multiprocessing.pool.ThreadPool uses the same value.

--
components: Library (Lib)
files: concurrent_futures_workers.patch
keywords: patch
messages: 218763
nosy: Claudiu.Popa, bquinlan
priority: normal
severity: normal
status: open
title: concurrent.futures.ThreadPoolExecutor does not use a default value
type: enhancement
versions: Python 3.5
Added file: http://bugs.python.org/file35287/concurrent_futures_workers.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21518] Expose RegUnloadKey in winreg

2014-05-18 Thread Claudiu.Popa

Claudiu.Popa added the comment:

Thanks. Here's the updated version. Also, I only tested it on Windows 8.1. I'll 
try to find another machine with an older OS for testing it.

--
Added file: http://bugs.python.org/file35288/issue21518_1.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue9673] Entry Widget Not Editable under Windows XP

2014-05-18 Thread Terry J. Reedy

Terry J. Reedy added the comment:

The reverenced post did not give a runnable minimal example with the claimed 
bug, but only described more complex code at a now dead link. The following 
from http://effbot.org/tkinterbook/entry.htm works on my Win7 machine.

import tkinter as tk
master = tk.Tk()
e = tk.Entry(master)
e.pack()
e.focus_set()
def callback():
print(e.get())
b = tk.Button(master, text="get", width=10, command=callback)
b.pack()
tk.mainloop()

--
resolution:  -> out of date
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19866] tests aifc, sunau and wave failures on a fresh Win64 installation

2014-05-18 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 5318bf3e70a6 by Benjamin Peterson in branch '2.7':
include test data in the windows installer, so tests don't fail (closes #19866)
http://hg.python.org/cpython/rev/5318bf3e70a6

--
nosy: +python-dev
resolution:  -> fixed
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19866] tests aifc, sunau and wave failures on a fresh Win64 installation

2014-05-18 Thread Benjamin Peterson

Benjamin Peterson added the comment:

I applied the patch to my release branch, so it will make it into 2.7.7 final.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21525] Accept lists in Tkinter

2014-05-18 Thread Terry J. Reedy

Terry J. Reedy added the comment:

Sounds like a good idea to me. The code looks pretty straightforward as far as 
I understood it.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21528] Fix a number of typos in the documentation

2014-05-18 Thread Alex Gaynor

New submission from Alex Gaynor:

Attached patch is against the default branch, and fixes a number of typos.

--
assignee: docs@python
components: Documentation
files: typos.diff
keywords: needs review, patch
messages: 218769
nosy: alex, docs@python
priority: normal
severity: normal
status: open
title: Fix a number of typos in the documentation
versions: Python 3.5
Added file: http://bugs.python.org/file35289/typos.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue6671] webbrowser doesn't respect xfce default browser

2014-05-18 Thread Berker Peksag

Berker Peksag added the comment:

Attaching a patch that checks both XDG_CURRENT_DESKTOP and DESKTOP_SESSION env 
vars for XFCE.

--
nosy: +berker.peksag
stage: test needed -> patch review
versions: +Python 3.5 -Python 3.2, Python 3.3
Added file: http://bugs.python.org/file35290/issue6671.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21529] JSON module: reading arbitrary process memory

2014-05-18 Thread Benjamin Peterson

New submission from Benjamin Peterson:

(Copy paste from the security list)

Python 2 and 3 are susceptible to arbitrary process memory reading by
a user or adversary due to a bug in the _json module caused by
insufficient bounds checking.

The sole prerequisites of this attack are that the attacker is able to
control or influence the two parameters of the default scanstring
function: the string to be decoded and the index.

The bug is caused by allowing the user to supply a negative index
value. The index value is then used directly as an index to an array
in the C code; internally the address of the array and its index are
added to each other in order to yield the address of the value that is
desired. However, by supplying a negative index value and adding this
to the address of the array, the processor's register value wraps
around and the calculated value will point to a position in memory
which isn't within the bounds of the supplied string, causing the
function to access other parts of the process memory.

Let me clarify:

This is Python-3.4.0/Modules/_json.c:

1035 static PyObject *
1036 scanner_call(PyObject *self, PyObject *args, PyObject *kwds)
1037 {
1038 /* Python callable interface to scan_once_{str,unicode} */
1039 PyObject *pystr;
1040 PyObject *rval;
1041 Py_ssize_t idx;
1042 Py_ssize_t next_idx = -1;
1043 static char *kwlist[] = {"string", "idx", NULL};
1044 PyScannerObject *s;
1045 assert(PyScanner_Check(self));
1046 s = (PyScannerObject *)self;
1047 if (!PyArg_ParseTupleAndKeywords(args, kwds, "On:scan_once",
kwlist, &pystr, &idx))
1048 return NULL;
1049
1050 if (PyUnicode_Check(pystr)) {
1051 rval = scan_once_unicode(s, pystr, idx, &next_idx);
1052 }
1053 else {
1054 PyErr_Format(PyExc_TypeError,
1055  "first argument must be a string, not %.80s",
1056  Py_TYPE(pystr)->tp_name);
1057 return NULL;
1058 }
1059 PyDict_Clear(s->memo);
1060 if (rval == NULL)
1061 return NULL;
1062 return _build_rval_index_tuple(rval, next_idx);
1063 }

As you can see on line 1047, ParseTuple takes an 'n' as an argument
for 'end', which, as can be learned from this page (
https://docs.python.org/3/c-api/arg.html ), means:

n (int) [Py_ssize_t]
Convert a Python integer to a C Py_ssize_t.

This means it accepts a SIGNED integer value, thus allowing a negative
value to be supplied as the 'end' parameter.

Then onto scanstring_unicode_once to which execution gets transferred
through line 1051 of the code above.

922  static PyObject *
923  scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t
idx, Py_ssize_t *next_idx_ptr)
924  {
925  /* Read one JSON term (of any kind) from PyUnicode pystr.
926  idx is the index of the first character of the term
927  *next_idx_ptr is a return-by-reference index to the first
character after
928  the number.
929
930  Returns a new PyObject representation of the term.
931  */
932  PyObject *res;
933  void *str;
934  int kind;
935  Py_ssize_t length;
936
937  if (PyUnicode_READY(pystr) == -1)
938  return NULL;
939
940  str = PyUnicode_DATA(pystr);
941  kind = PyUnicode_KIND(pystr);
942  length = PyUnicode_GET_LENGTH(pystr);
943
944  if (idx >= length) {
945  raise_stop_iteration(idx);
946  return NULL;
947  }

Here we see that 'length' is set to the length of the string
parameter. This will always be a positive value. On line 945 it is
checked whether idx is equal or higher than length; this can never be
true in the case of a negative index value.

949  switch (PyUnicode_READ(kind, str, idx)) {

PyUnicode_READ is defined as follows ( in
Python-3.4.0/Include/unicodeobject.h ):

516  /* Read a code point from the string's canonical representation.  No checks
517 or ready calls are performed. */
518  #define PyUnicode_READ(kind, data, index) \
519  ((Py_UCS4) \
520  ((kind) == PyUnicode_1BYTE_KIND ? \
521  ((const Py_UCS1 *)(data))[(index)] : \
522  ((kind) == PyUnicode_2BYTE_KIND ? \
523  ((const Py_UCS2 *)(data))[(index)] : \
524  ((const Py_UCS4 *)(data))[(index)] \
525  ) \
526  ))

Here we can see that index, which is negative in our example, is used
as an array index. Since it is negative, it will internally wrap
around and point to an address BELOW the address of 'data'.

So, if a certain negative value (such as -0x7FFF) is supplied and
data[index] will effectively point to an invalid or read-protected
page in memory, the Python executable will segfault.

But there's more. Instead of making it point to an invalid page, let's
make it point to something valid:

1from json import JSONDecoder
2j = JSONDecoder()
3a = "99448866"
4b = "88445522"
5diff = id(a) - id(b)
6print("Difference is " + hex(diff))
7print j.raw_decode(b)

[issue21529] JSON module: reading arbitrary process memory

2014-05-18 Thread Benjamin Peterson

Benjamin Peterson added the comment:

http://hg.python.org/cpython/rev/50c07ed1743d
http://hg.python.org/cpython/rev/a8facac493ef

--
resolution:  -> fixed
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue20620] Update the min()/max() docs for the new default argument

2014-05-18 Thread Berker Peksag

Berker Peksag added the comment:

Rebased patch.

--
versions: +Python 3.5
Added file: http://bugs.python.org/file35291/issue20620_v3.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue20620] Update the min()/max() docs for the new default argument

2014-05-18 Thread Berker Peksag

Changes by Berker Peksag :


Removed file: http://bugs.python.org/file34081/issue20620.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21530] Integer overflow in strop

2014-05-18 Thread Benjamin Peterson

New submission from Benjamin Peterson:

(copy paste from security list)

"""
Integer overflow in strop.expandtabs:

Aside:
I took a look at python over the weekend as I saw the
the Internet Bug Bounty [ https://hackerone.com/python ]
are now offering bounties for security bugs + patches for
python.

It's quite unclear from their site what they consider to be
a valid bug under their program (they say 'arbitrary code
execution' but I guess just saying "ctypes" would be cheating.)

Anyway, here's a bug in a string handling function which might be
reachable in some "sandboxed python" environments, and maybe
(at a stretch) remotely if someone were to offer
"expanding-tabs-in-strings"-as-a-service...

Bug:

Modules/stropmodule.c

static PyObject *
strop_expandtabs(PyObject *self, PyObject *args)
...
  i = j = old_j = 0;
  e = string + stringlen;
  for (p = string; p < e; p++) {
  if (*p == '\t') {
  j += tabsize - (j%tabsize);
  if (old_j > j) {
  PyErr_SetString(PyExc_OverflowError,
  "new string is too long");
  return NULL;
  }
  old_j = j;
  } else {
  j++;
  if (*p == '\n') {
  i += j;   <-- missing check here
  j = 0;
  }
  }
  }
...
  out = PyString_FromStringAndSize(NULL, i+j);
...
  i = 0;
  q = PyString_AS_STRING(out);

  for (p = string; p < e; p++) {
  if (*p == '\t') {
  j = tabsize - (i%tabsize);
  i += j;
  while (j-- > 0)
  *q++ = ' ';
  } else {
  *q++ = *p;
  i++;
  if (*p == '\n')
  i = 0;
  }
  }
...

There's no check preventing i from overflowing, meaning that a
string consisting of multiple tabs spread over multiple lines
combined with a large tabsize can cause the allocation of an
undersized string buffer.

With some simple heap manipulation the length of the copy into
this buffer can be controlled, and it's pretty easy to corrupt
memory in such a way as to gain native code execution:

[h1|--][h2|\t\n\t\n][h3|--]

h1: PyStringObject header of undersized buffer
h2: PyStringObject header of tabstring

By grooming the heap such that this allocation pattern is
achieved when the expandtabs function starts expanding the h2 string
into the h1 inline buffer it will overflow into the string being
expanded, overwriting the tabs in the original string with spaces
so that the second loop won't expand them anymore.

By carefully crafting the string to expand and choosing the tabsize
you can limit the extent of the memory corruption to chosen objects.

Getting code execution is simply a matter of pointing the ob_type
field of the h2 string header to a controlled address with a fake
struct _typeobject. The struct contains the following function pointers
which will be called when their corrisponing python function
is called:

  destructor tp_dealloc;
  printfunc tp_print;
  getattrfunc tp_getattr;
  setattrfunc tp_setattr;
  cmpfunc tp_compare;
  reprfunc tp_repr;

Run this email as a script for a very simple crashing PoC for 32-bit python 2.7
which should crash at at address near 0x20202020 (since the ob_type field
will be overwritten with spaces.) No idea if the heap manipulation used
here will work on other platforms but it should be easy to do.


Patch:
You've actually already patched this bug in a copy-and-paste version of
this function... In fact there seem to be at least three versions of expandtabs;
transmogrify.h and stropmodule.c are both vulnerable; stringobject.c isn't. I'm
not familiar enough with the code to know when each version will be used.

The patch is to use the stringobject.c implementation which does the overflow
check correctly, but here's a quick patch (for the 2.7 branch) which will do
the job:

--- a/Modules/stropmodule.c Sun Mar 30 16:43:11 2014 -0400
+++ b/Modules/stropmodule.c Mon Mar 31 00:36:57 2014 +0200
@@ -624,6 +624,11 @@
 } else {
 j++;
 if (*p == '\n') {
+if (i > PY_SSIZE_T_MAX - j){
+PyErr_SetString(PyExc_OverflowError,
+"new string is too long");
+return NULL;
+}
 i += j;
 j = 0;
 }

Cheers,

Ian Beer
"""

import strop

strs = []
for i in range(20):
  strs.append('\t\n' * 0x1 + 'A' * 0x100)
for i in range(20):
  print hex(id(strs[i]))
strs[14] = None
strop.expandtabs(strs[15], 0x10001)
print strs[15]

--
components: Extension Modules, Library (Lib)
messages: 218774
nosy: benjamin.peterson
priority: critical
severity: normal
status: open
title: Integer overflow in strop
type: security
versions: Python 2.7

___
Python tracker 

___
___
Python-bugs-list mailing list
Un

[issue21530] Integer overflow in strop

2014-05-18 Thread Benjamin Peterson

Benjamin Peterson added the comment:

5dabc2d2f776

--
resolution:  -> fixed
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12387] IDLE save keyboard shortcut problem

2014-05-18 Thread Terry J. Reedy

Terry J. Reedy added the comment:

Reading the Tk Wiki page, it appears that Shift undoes ShiftLock except on Mac, 
where it does nothing. So there is effectively only ^a and ^A, etc.

Looking as the Get New Keys dialog, the Basic Key Binding Entry pane says "New 
keys .." plural, but as far as I can tell, only one new key can be entered. 
Moreover, Control-Key-a and Control-Shift-Key-A are possible, but not 
Control-Key-A. The latter is only possible with hand entry in the Advanced Key 
Binding Entry pane. This might be why some functions have a single key binding 
and some both. Perhaps the dialog should auto-augment Control-Key-x with 
Control-Key-X, where x is a lowercase letter.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19979] Missing nested scope vars in class scope (bis)

2014-05-18 Thread Ethan Furman

Changes by Ethan Furman :


--
nosy: +ethan.furman

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17352] Be clear that __prepare__ must be declared as a class method

2014-05-18 Thread Ethan Furman

Changes by Ethan Furman :


--
nosy: +ethan.furman

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue18334] type(name, bases, dict) does not call metaclass' __prepare__ attribute

2014-05-18 Thread Ethan Furman

Changes by Ethan Furman :


--
nosy: +ethan.furman

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17421] Drop restriction that meta.__prepare__() must return a dict (subclass)

2014-05-18 Thread Ethan Furman

Changes by Ethan Furman :


--
nosy: +ethan.furman

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17422] language reference should specify restrictions on class namespace

2014-05-18 Thread Ethan Furman

Changes by Ethan Furman :


--
nosy: +ethan.furman

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17044] Implement PEP 422: Simple class initialisation hook

2014-05-18 Thread Ethan Furman

Changes by Ethan Furman :


--
nosy: +ethan.furman

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17044] Implement PEP 422: Simple class initialisation hook

2014-05-18 Thread Berker Peksag

Changes by Berker Peksag :


--
versions: +Python 3.5 -Python 3.4

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21519] IDLE : Bug in keybinding validity check

2014-05-18 Thread Terry J. Reedy

Terry J. Reedy added the comment:

> Now the  binding will be assigned to two actions.

I do not see this. I only see  duplicated, which is bad enough 
to be patched. What did you leave out ;-).

Also see #12387, which we need to finish, and Ned's link to  
http://wiki.tcl.tk/28331 

A patch for KeysOK should include test_bindings.py with class KeysOK_Test. As 
with the test of name_ok in test_configname.py (sp?), the method should be 
embedded in a dummy class and use a dummy message box.

The problem with the method goes deeper. It is not called if the 'advanced' 
(hand entry, therefore primitive) pane is used. As near as I can tell (and if I 
am wrong, please tell me), multiple bindings, which are required to ignore 
lower-upper case issues, can only be entered with this 'advanced' method. 
Hence, most new entries are not checked at all. The basic pane, which is 
advanced in that one can only enter possibly valid combination, should be 
modified to allow multiple entries. (The two panes should be called 'Easy' and 
'Error-prone ;-)

As it is, 'keys' is a misnomer[note], "keys.strip()" is a no-op in that 'keys' 
is auto-generated, and "keySequence = keys.split()" is the same as "keySequence 
= [keys]"[note]. Many of the tests only test mistakes that can happen with 
hand-entry, which is not tested. I believe that the duplicate check is the only 
one needed (except possible for the modifier check, which I have not looked at 
enough to tell).

[note] If the easy pane were modified to define multiple keys, and all were 
passed at once, then the two noted lines would become valid, but then each key, 
would have to be tested individually against the flat list.

This suggests to me that the flattening should be done just once and that 
KeysOK should become KeyOK, or rather key_ok. It might even be replaced by 
"newkey in flat_list" or something nearly that simple.

--
stage:  -> test needed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19979] Missing nested scope vars in class scope (bis)

2014-05-18 Thread Terry J. Reedy

Terry J. Reedy added the comment:

#17853 was in the context of metaclasses. Even so, I am puzzled by the opening 
statement there that

from enum import Enum  # I added this as necessary
class Season(Enum):
SPRING = Season()

"works beautifully" at top level as it indeed raises
NameError: name 'Season' is not defined

My point here is that changing the output of

n=1
def f(n=2):
class A: n=n
return A
print(f().n)

from 1, as it has been from the beginning (except for the print change) to 2, 
which I believe is implied in the request, is not the sort of syntax change we 
do. Hence I think this should be closed.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19979] Missing nested scope vars in class scope (bis)

2014-05-18 Thread Ethan Furman

Ethan Furman added the comment:

Terry remarked:
---
> I am puzzled by the opening statement there that
>
>   from enum import Enum  # I added this as necessary
>   class Season(Enum):
>   SPRING = Season()
>
> "works beautifully" at top level as it indeed raises
> NameError: name 'Season' is not defined

Pay close attention to the line just before that example:

> I tried having the metaclass insert an object into the custom dict
> (aka namespace) returned by __prepare__; this object has the same
> name as the to-be-created class.

It does not raise a NameError because the name was injected via the metaclass 
__prepare__ method.  (Or did at that time -- I don't think that bit of 
cleverness made the final cut.)

As far as this enhancement request goes, I think the compatibility break is 
likely too large to have it in the 3.x series.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21531] Sending a zero-length UDP packet to asyncore invokes handle_close()

2014-05-18 Thread Tony Gedge

New submission from Tony Gedge:

Sending a zero-length UDP packet to asyncore closes socket by default.

The default implementation of recv() assumes that zero-length data means close. 
 This isn't true for UDP - it is possible to send a zero-length payload packet.

A possible work-around is to overload handle_close() and not call self.close(). 
However, as handle_close() is called as part of exception handling, we can't 
determine whether the handle_close() is happening due to a zero-length payload 
or an exception event.

It should be possible to process a zero-length payload UDP packet.

--
components: Library (Lib)
messages: 218780
nosy: Tony.Gedge
priority: normal
severity: normal
status: open
title: Sending a zero-length UDP packet to asyncore invokes handle_close()
type: behavior
versions: Python 2.7

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21532] 2.7.7rc1 msi is lacking libpython27.a

2014-05-18 Thread Martin v . Löwis

New submission from Martin v. Löwis:

The 32-bit installer should include libpython27.a, the import library in GNU ld 
format. To build it, cygwin must be installed and on PATH when the MSI is 
built. The file will end up in libs/libpython27.a

--
components: Windows
messages: 218781
nosy: loewis, steve.dower
priority: normal
severity: normal
status: open
title: 2.7.7rc1 msi is lacking libpython27.a

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com