mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
Revert r33661, which broke all buildbots.
This commit is contained in:
parent
14b785192b
commit
8530e8590f
4 changed files with 27 additions and 33 deletions
|
@ -135,12 +135,6 @@ class CmdLineTest(unittest.TestCase):
|
||||||
self.exit_code('-c', 'pass'),
|
self.exit_code('-c', 'pass'),
|
||||||
0)
|
0)
|
||||||
|
|
||||||
# Test handling of non-ascii data
|
|
||||||
command = "assert(ord('\xe9') == 0xe9)"
|
|
||||||
self.assertEqual(
|
|
||||||
self.exit_code('-c', command),
|
|
||||||
0)
|
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
test.support.run_unittest(CmdLineTest)
|
test.support.run_unittest(CmdLineTest)
|
||||||
|
|
|
@ -13,7 +13,8 @@ Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
- Issue #3705: fix crash when given a non-ascii value on the command line for
|
- Issue #3705: fix crash when given a non-ascii value on the command line for
|
||||||
the "-c" and "-m" parameters.
|
the "-c" and "-m" parameters. Now the behaviour is as expected under Linux,
|
||||||
|
although under Windows it fails at a later point.
|
||||||
|
|
||||||
- Issue #3279: Importing site at interpreter was failing silently because the
|
- Issue #3279: Importing site at interpreter was failing silently because the
|
||||||
site module uses the open builtin which was not initialized at the time.
|
site module uses the open builtin which was not initialized at the time.
|
||||||
|
|
|
@ -287,7 +287,7 @@ Py_Main(int argc, wchar_t **argv)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int sts;
|
int sts;
|
||||||
wchar_t *command = NULL;
|
char *command = NULL;
|
||||||
wchar_t *filename = NULL;
|
wchar_t *filename = NULL;
|
||||||
wchar_t *module = NULL;
|
wchar_t *module = NULL;
|
||||||
FILE *fp = stdin;
|
FILE *fp = stdin;
|
||||||
|
@ -299,6 +299,7 @@ Py_Main(int argc, wchar_t **argv)
|
||||||
int version = 0;
|
int version = 0;
|
||||||
int saw_unbuffered_flag = 0;
|
int saw_unbuffered_flag = 0;
|
||||||
PyCompilerFlags cf;
|
PyCompilerFlags cf;
|
||||||
|
char *oldloc;
|
||||||
|
|
||||||
cf.cf_flags = 0;
|
cf.cf_flags = 0;
|
||||||
|
|
||||||
|
@ -309,19 +310,30 @@ Py_Main(int argc, wchar_t **argv)
|
||||||
|
|
||||||
while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) {
|
while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) {
|
||||||
if (c == 'c') {
|
if (c == 'c') {
|
||||||
size_t len;
|
size_t r1, r2;
|
||||||
|
oldloc = setlocale(LC_ALL, NULL);
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
r1 = wcslen(_PyOS_optarg);
|
||||||
|
r2 = wcstombs(NULL, _PyOS_optarg, r1);
|
||||||
|
if (r2 == (size_t) -1)
|
||||||
|
Py_FatalError(
|
||||||
|
"cannot convert character encoding of -c argument");
|
||||||
|
if (r2 > r1)
|
||||||
|
r1 = r2;
|
||||||
|
r1 += 2;
|
||||||
/* -c is the last option; following arguments
|
/* -c is the last option; following arguments
|
||||||
that look like options are left for the
|
that look like options are left for the
|
||||||
command to interpret. */
|
command to interpret. */
|
||||||
|
command = (char *)malloc(r1);
|
||||||
len = wcslen(_PyOS_optarg) + 1 + 1;
|
|
||||||
command = (wchar_t *)malloc(sizeof(wchar_t) * len);
|
|
||||||
if (command == NULL)
|
if (command == NULL)
|
||||||
Py_FatalError(
|
Py_FatalError(
|
||||||
"not enough memory to copy -c argument");
|
"not enough memory to copy -c argument");
|
||||||
wcscpy(command, _PyOS_optarg);
|
r2 = wcstombs(command, _PyOS_optarg, r1);
|
||||||
command[len - 2] = '\n';
|
if (r2 > r1-1)
|
||||||
command[len - 1] = 0;
|
Py_FatalError(
|
||||||
|
"not enough memory to copy -c argument");
|
||||||
|
strcat(command, "\n");
|
||||||
|
setlocale(LC_ALL, oldloc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,18 +543,8 @@ Py_Main(int argc, wchar_t **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command) {
|
if (command) {
|
||||||
PyObject *commandObj = PyUnicode_FromUnicode(
|
sts = PyRun_SimpleStringFlags(command, &cf) != 0;
|
||||||
command, wcslen(command));
|
|
||||||
free(command);
|
free(command);
|
||||||
if (commandObj != NULL) {
|
|
||||||
sts = PyRun_SimpleStringFlags(
|
|
||||||
_PyUnicode_AsString(commandObj), &cf) != 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
PyErr_Print();
|
|
||||||
sts = 1;
|
|
||||||
}
|
|
||||||
Py_DECREF(commandObj);
|
|
||||||
} else if (module) {
|
} else if (module) {
|
||||||
sts = RunModule(module, 1);
|
sts = RunModule(module, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2804,7 +2804,6 @@ call_find_module(char *name, PyObject *path)
|
||||||
{
|
{
|
||||||
extern int fclose(FILE *);
|
extern int fclose(FILE *);
|
||||||
PyObject *fob, *ret;
|
PyObject *fob, *ret;
|
||||||
PyObject *pathobj;
|
|
||||||
struct filedescr *fdp;
|
struct filedescr *fdp;
|
||||||
char pathname[MAXPATHLEN+1];
|
char pathname[MAXPATHLEN+1];
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
|
@ -2848,9 +2847,9 @@ call_find_module(char *name, PyObject *path)
|
||||||
fob = Py_None;
|
fob = Py_None;
|
||||||
Py_INCREF(fob);
|
Py_INCREF(fob);
|
||||||
}
|
}
|
||||||
pathobj = PyUnicode_DecodeFSDefault(pathname);
|
ret = Py_BuildValue("Os(ssi)",
|
||||||
ret = Py_BuildValue("NN(ssi)",
|
fob, pathname, fdp->suffix, fdp->mode, fdp->type);
|
||||||
fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
|
Py_DECREF(fob);
|
||||||
PyMem_FREE(found_encoding);
|
PyMem_FREE(found_encoding);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -2861,9 +2860,7 @@ imp_find_module(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
PyObject *path = NULL;
|
PyObject *path = NULL;
|
||||||
if (!PyArg_ParseTuple(args, "es|O:find_module",
|
if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
|
||||||
Py_FileSystemDefaultEncoding, &name,
|
|
||||||
&path))
|
|
||||||
return NULL;
|
return NULL;
|
||||||
return call_find_module(name, path);
|
return call_find_module(name, path);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue