aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii <[email protected]>2008-05-03 10:11:22 +0000
committerEli Zaretskii <[email protected]>2008-05-03 10:11:22 +0000
commit064032d03080c9f64ce5196a6f2664acdbeb95e4 (patch)
tree74d779d6379096f3e581c9493381f8604da401d9
parent50eff40ff15b6349137bc9618d021495c72815af (diff)
(Ffile_attributes): Don't allow the device number become negative.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/dired.c7
2 files changed, 10 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 0849e9ee4b..8efef81455 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-03 Eli Zaretskii <[email protected]>
+
+ * dired.c (Ffile_attributes): Don't allow the device number become
+ negative.
+
2008-05-02 YAMAMOTO Mitsuharu <[email protected]>
* config.in: Regenerate.
diff --git a/src/dired.c b/src/dired.c
index 31b7e19dda..7936e04a54 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -1048,8 +1048,11 @@ Elements of the attribute list are:
/* But keep the most common cases as integers. */
values[10] = make_number (ino);
- /* Likewise for device. */
- if (FIXNUM_OVERFLOW_P (s.st_dev))
+ /* Likewise for device, but don't let it become negative. We used
+ to use FIXNUM_OVERFLOW_P here, but that won't catch large
+ positive numbers such as 0xFFEEDDCC. */
+ if ((EMACS_INT)s.st_dev < 0
+ || (EMACS_INT)s.st_dev > MOST_POSITIVE_FIXNUM)
values[11] = Fcons (make_number (s.st_dev >> 16),
make_number (s.st_dev & 0xffff));
else