|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #5993 numeric fields with field len > 10 are chopped
Submitted: 2000-08-06 18:44 UTC Modified: 2001-12-13 23:27 UTC
From: bazsi at balabit dot hu Assigned: vlad (profile)
Status: Closed Package: dBase related
PHP Version: 4.0.1pl2 OS: Linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: bazsi at balabit dot hu
New email:
PHP Version: OS:


 [2000-08-06 18:44 UTC] bazsi at balabit dot hu
Here's the patch to fix the bug above:

diff -urN php-4.0.1pl2/ext/dbase/dbase.c php-4.0.1pl2.bazsi/ext/dbase/dbase.c
--- php-4.0.1pl2/ext/dbase/dbase.c      Sun Jun 25 19:02:44 2000
+++ php-4.0.1pl2.bazsi/ext/dbase/dbase.c        Sun Aug  6 18:42:16 2000
@@ -455,7 +455,12 @@
                case 'N':       /* FALLS THROUGH */
                case 'L':       /* FALLS THROUGH */
                        if (cur_f->db_fdc == 0) {
-                               add_next_index_long(return_value, strtol(str_value, NULL, 10));
+                               if (cur_f->db_flen >= 10) {
+                                       add_next_index_string(return_value, str_value, 1);
+                               }
+                               else {
+                                       add_next_index_long(return_value, strtol(str_value, NULL, 10));
+                               }
                        } else {
                                add_next_index_double(return_value, atof(str_value));


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2000-08-23 08:55 UTC]
Is this one fixed in newer versions of php4?
(CVS or

 [2000-09-29 09:15 UTC]
This isn't fixed.

 [2001-03-16 14:46 UTC]
this also seems to do funny things to HTTP_SERVER_VARS['argv']
 [2001-05-29 23:03 UTC]
Numerical values can be represented by up to 18 characters of text. They can be up to 20 characters long in FoxPro and Clipper. Even 10 characters is more than we can fit in a long right? So, this is a bug even for numbers represented by 10 characters.

Question: Should we just return those large numbers as text (since we do not have an appropriate datatype in PHP) and say so clearly in documentation, or should we just always return them as text (which is more consistent, and shouldn't break too many things since text and integers in PHP are not all that different as far as users are concerned.

I'd opt for the first option. It won't break anyone's stuff, and will allow people with large integers to still use it. I want to see if anyone has a different opinion, and if not, I'll implement a fix (first option).

I'll also assign it to myself (hope nobody minds)


 [2001-10-30 19:00 UTC]
status -> assigned

 [2001-12-13 23:27 UTC]
fixed. Now if the integer returned can't fit in a long, we keep it as a string. You can tell if an overflow occurred by looking at the return type (long vs string).

Both dbase_get_record() and dbase_get_record_with_names() got fixed.

Still need to update documentation to reflect that chage.

PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Jun 16 21:01:29 2024 UTC