annotate Python/getmtime.c @ 13226:12437deb0680 legacy-trunk

Trent Mick <trentm@activestate.com>: This patch fixes possible overflow in the use of PyOS_GetLastModificationTime in getmtime.c and Python/import.c. Currently PyOS_GetLastModificationTime returns a C long. This can overflow on Win64 where sizeof(time_t) > sizeof(long). Besides it should logically return a time_t anyway (this patch changes this). As well, import.c uses PyOS_GetLastModificationTime for .pyc timestamping. There has been recent discussion about the .pyc header format on python-dev. This patch adds oveflow checking to import.c so that an exception will be raised if the modification time overflows. There are a few other minor 64-bit readiness changes made to the module as well: - size_t instead of int or long for function-local buffer and string length variables - one buffer overflow check was added (raises an exception on possible overflow, this overflow chance exists on 32-bit platforms as well), no other possible buffer overflows existed (from my analysis anyway) Closes SourceForge patch #100509.
author Fred Drake <fdrake@acm.org>
date Fri, 30 Jun 2000 16:18:57 +0000
parents 4279f4eb210a
children 916fb024ce94
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
2062
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1856
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1856
diff changeset
3 The Netherlands.
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
8 documentation for any purpose and without fee is hereby granted,
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
10 both that copyright notice and this permission notice appear in
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
15 permission.
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4043
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 /* Subroutine to get the last modification time of a file */
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 /* (A separate file because this may be OS dependent) */
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
13226
12437deb0680 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 6243
diff changeset
36 #include "Python.h"
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1449
diff changeset
37 #include "config.h"
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1449
diff changeset
38
6243
4279f4eb210a First part of package support.
Guido van Rossum <guido@python.org>
parents: 5440
diff changeset
39 #include <stdio.h>
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 #include <sys/types.h>
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 #include <sys/stat.h>
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
13226
12437deb0680 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 6243
diff changeset
43 time_t
6243
4279f4eb210a First part of package support.
Guido van Rossum <guido@python.org>
parents: 5440
diff changeset
44 PyOS_GetLastModificationTime(path, fp)
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 char *path;
6243
4279f4eb210a First part of package support.
Guido van Rossum <guido@python.org>
parents: 5440
diff changeset
46 FILE *fp;
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 {
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 struct stat st;
6243
4279f4eb210a First part of package support.
Guido van Rossum <guido@python.org>
parents: 5440
diff changeset
49 if (fstat(fileno(fp), &st) != 0)
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 return -1;
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 else
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 return st.st_mtime;
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 }