Bug 51216 - Fatal error when syncing w/ KPilot
Summary: Fatal error when syncing w/ KPilot
Status: RESOLVED FIXED
Alias: None
Product: kpilot
Classification: Applications
Component: General (show other bugs)
Version: unspecified
Platform: openSUSE Linux
: NOR crash
Target Milestone: ---
Assignee: Reinhold Kainhofer
URL:
Keywords:
: 59313 63785 (view as bug list)
Depends on:
Blocks:
 
Reported: 2002-11-26 08:39 UTC by Reinhold Kainhofer
Modified: 2003-09-06 12:29 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Reinhold Kainhofer 2002-11-26 08:39:42 UTC
Version:            (using KDE KDE 3.0.4)
Installed from:    SuSE RPMs
OS:          Linux

Dear Reinhold,

sorry to bother you again. However I am experiencing major difficulties when 
Syncing my Visor with KPilot.

While Syncing the Calendar the following occurs:

DataMgr.c Line 5964
Invalid uniqueID passed

<Reset>


Could Kpilot (shipped with KDE 3.0.4 SuSE RPMS) by the cause of that?

After this crash even with resetting the Visor and KpilotDaemon (killall 
kpilotDaemon) no further syncing is possible. This time the Kernel itself 
seems to be the problem:

Nov	9 01:08:06 vienna kernel: usb.c: USB device not accepting new address=13 
(error=-110)

Do you have any advice about this behaviour???


If you decide to have a look at the problem the cosnole output of kpilotDaemon 
might be interesting too. So here it is:

<snip>
PilotRecord                                         (pilotRecord.cc:51)
writeRecord                                         
(pilotSerialDatabase.cc:174)
writeRecord                                         
(pilotLocalDatabase.cc:279)
PilotRecord                                         (pilotRecord.cc:60)
readRecordById                                      
(pilotSerialDatabase.cc:99)
PilotRecord                                         (pilotRecord.cc:51)
setDescription                                      (pilotDateEntry.cc:151)
setNote                                             (pilotDateEntry.cc:180)
PilotRecord                                         (pilotRecord.cc:51)
writeRecord                                         
(pilotSerialDatabase.cc:174)
writeRecord                                         
(pilotLocalDatabase.cc:279)
PilotRecord                                         (pilotRecord.cc:60)
readRecordById                                      
(pilotSerialDatabase.cc:99)
Got tickled
Got tickled
Got tickled
Got tickled
Got tickled
Got tickled
Got tickled
Got tickled
</snip>

Cheers,
Thorsten
- -- 
Thorsten Hornung
Bonn, Germany
Comment 1 Christian Esken 2003-01-14 23:19:51 UTC
It does not have to do anything with USB. 
 
It happens an my Palm Vx (Serial port!) as well. 
 
BTW: kpilot has never ever synced my palm, while 
pilot-xfer -sync always works out of the box. 
 
The version I use is self-compiled CVS version: 
V4.3.5 (Using KDE 3.1.90 (CVS >= 20021124)) 
 
And here's the log: 
 
HotSync Log 
23:19:05 Trying to open device... 
23:19:05 Device link ready. 
23:19:15 Checking last PC... 
23:19:15 Syncing with KMail(Kroupware) disabled 
23:19:15 KPilot 4.3.5 HotSync starting...  
23:19:16 [Conduit vcal-conduit] 
23:19:17 Syncing with file "" 
23:20:52 [Conduit knotes-conduit] 
23:20:52 KNotes is not running. The conduit must be able to make a DCOP connection to 
KNotes for synchronization to take place. Please start KNotes and try again. 
23:20:55 The conduit knotes-conduit could not be executed. 
23:20:56 [Conduit abbrowser_conduit] 
23:22:25 No Files to install 
23:22:25 End of HotSync  
23:22:25 HotSync Completed. 
 
23:22:27 Pilot device /dev/pilot doesn't exist. Assuming the device uses DevFS. 
23:22:28 Trying to open device... 
23:22:28 Could not open device: /dev/pilot (will retry) 
 
 
Comment 2 Christian Esken 2003-03-19 22:13:08 UTC
Forget my comment: Error Message on Palm is the same (Invalid uniqueID passed),
but it happens while syncing adresses. Doing full sync combined with some other
"correct" syncing options helps.
Chris
Comment 3 MG 2003-03-29 17:55:33 UTC
I have the same problem when syncing  my Palm III, except the line number is
different.

I did have an address/contact conflict i.e. address was different on the PC and
Handheld, I got the conflict resolution dialog box with options to choose which
address should be used in sync'ing.  I selected "leave untouched", after that it
hung and I had to reset the Palm.  I retried and selected "PC overrides
Handheld" and got the same thing.

This is the error message:

DataMgr.c Line:4250
Invalid uniqueID passed

<reset>

Other info that maybe useful:
=======================
-- pilot-link.0.11.7
-- KPIM built from sources KDE3.1.0

g++ -v
Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)

-- Kevin
Comment 4 MG 2003-03-29 18:02:01 UTC
BTW, KPIM was built from sources KDE3.1.0/QT3.1.2

-- MG
Comment 5 Reinhold Kainhofer 2003-06-12 09:43:40 UTC
Subject: kdepim/kpilot/lib

CVS commit by kainhofe: 

Added a check for invalid record ids when searching or writing records to the handheld. If they take more than 3 bytes, the handheld will crash, so I reset the id to zero to cause new record IDs to be assigned. This will prevent these crashes in the future, but I still have to find the place where these wrong values were assigned first place.

CCMAIL: 59313@bugs.kde.org
CCMAIL: 51216@bugs.kde.org


  M +3 -3      pilotRecord.h   1.7
  M +19 -3     pilotSerialDatabase.cc   1.16


--- kdepim/kpilot/lib/pilotSerialDatabase.cc  #1.15:1.16
@@ -144,4 +144,10 @@ PilotRecord *PilotSerialDatabase::readRe
                 return 0L;
         }
+        if (id>0xFFFFFF)
+        {
+                kdError() << k_funcinfo <<  " Encountered an invalid record id "
+                        <<id<<endl;;
+                return 0L;
+        }
         if (dlp_ReadRecordById(fDBSocket, getDBHandle(), id, buffer, &index,
                         &size, &attr, &category) >= 0)
@@ -210,5 +216,5 @@ PilotRecord *PilotSerialDatabase::readNe
 }
 
-// Writes a new record to database (if 'id' == 0, one will be assigned and returned in 'newid')
+// Writes a new record to database (if 'id' == 0 or id>0xFFFFFF, one will be assigned and returned in 'newid')
 recordid_t PilotSerialDatabase::writeRecord(PilotRecord * newRecord)
 {
@@ -222,4 +228,14 @@ recordid_t PilotSerialDatabase::writeRec
                 return 0;
         }
+        // Do some sanity checking to prevent invalid UniqueIDs from being written
+        // to the handheld (RecordIDs are only 3 bytes!!!). Under normal conditions
+        // this check should never yield true, so write out an error to indicate
+        // someone messed up full time...
+        if (newRecord->getID()>0xFFFFFF)
+        {
+                kdError() << k_funcinfo << "Encountered an invalid record id "
+                        <<newRecord->getID()<<", resetting it to zero.";
+                newRecord->setID(0);
+        }
         success =
                 dlp_WriteRecord(fDBSocket, getDBHandle(),
@@ -227,5 +243,5 @@ recordid_t PilotSerialDatabase::writeRec
                 newRecord->getCat(), newRecord->getData(),
                 newRecord->getLen(), &newid);
-        if (newRecord->getID() == 0)
+        if (newRecord->getID() != newid)
                 newRecord->setID(newid);
         return newid;

--- kdepim/kpilot/lib/pilotRecord.h  #1.6:1.7
@@ -51,6 +51,6 @@ public:
         void  setCat(int cat) { fCat = cat; }
 
-        unsigned long getID() const { return fID; }
-        void setID(unsigned long id) { fID = id; }
+        recordid_t getID() const { return fID; }
+        void setID(recordid_t id) { fID = id; }
 
 private:
@@ -59,5 +59,5 @@ private:
         int   fAttrib;
         int   fCat;
-        unsigned long fID;
+        recordid_t fID;
 
 public:


Comment 6 Reinhold Kainhofer 2003-06-12 10:11:58 UTC
*** Bug 59313 has been marked as a duplicate of this bug. ***
Comment 7 Reinhold Kainhofer 2003-07-27 14:35:03 UTC
The check for invalid IDs which I commited to current cvs and the 3.1 branch 
disallows the situation, where the crash occurs, and resets the ID to a valid value. So 
I consider this bug fixed. 
Comment 8 Reinhold Kainhofer 2003-09-06 12:29:09 UTC
*** Bug 63785 has been marked as a duplicate of this bug. ***