From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Christopher J. White" Newsgroups: gmane.emacs.bugs Subject: bug#10768: 23.3; url-http misses data when last few bytes are in 2nd packet and content-length is used Date: Wed, 8 Feb 2012 23:53:21 -0500 Message-ID: <20120208235321.00003609@unknown> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: dough.gmane.org 1328763253 27449 80.91.229.3 (9 Feb 2012 04:54:13 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 9 Feb 2012 04:54:13 +0000 (UTC) To: 10768@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Feb 09 05:54:10 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RvM1I-00042v-3c for geb-bug-gnu-emacs@m.gmane.org; Thu, 09 Feb 2012 05:54:08 +0100 Original-Received: from localhost ([::1]:56280 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvM1H-00065Z-Oq for geb-bug-gnu-emacs@m.gmane.org; Wed, 08 Feb 2012 23:54:07 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:51825) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvM1A-00064R-NG for bug-gnu-emacs@gnu.org; Wed, 08 Feb 2012 23:54:06 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RvM18-0003t2-3q for bug-gnu-emacs@gnu.org; Wed, 08 Feb 2012 23:54:00 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:57731) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvM17-0003st-NY for bug-gnu-emacs@gnu.org; Wed, 08 Feb 2012 23:53:57 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1RvM2A-0000Mh-Hp for bug-gnu-emacs@gnu.org; Wed, 08 Feb 2012 23:55:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: "Christopher J. White" Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 09 Feb 2012 04:55:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 10768 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.13287632951388 (code B ref -1); Thu, 09 Feb 2012 04:55:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 9 Feb 2012 04:54:55 +0000 Original-Received: from localhost ([127.0.0.1]:33121 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RvM21-0000MH-J0 for submit@debbugs.gnu.org; Wed, 08 Feb 2012 23:54:55 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:60926) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RvM1x-0000M3-E0 for submit@debbugs.gnu.org; Wed, 08 Feb 2012 23:54:52 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RvM0l-0003gK-8y for submit@debbugs.gnu.org; Wed, 08 Feb 2012 23:53:38 -0500 Original-Received: from lists.gnu.org ([140.186.70.17]:37717) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvM0l-0003gA-2O for submit@debbugs.gnu.org; Wed, 08 Feb 2012 23:53:35 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:51314) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvM0i-0005yU-PM for bug-gnu-emacs@gnu.org; Wed, 08 Feb 2012 23:53:34 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RvM0e-0003db-Qz for bug-gnu-emacs@gnu.org; Wed, 08 Feb 2012 23:53:32 -0500 Original-Received: from mail237c25.carrierzone.com ([64.29.147.233]:57231) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvM0e-0003bz-0K for bug-gnu-emacs@gnu.org; Wed, 08 Feb 2012 23:53:28 -0500 X-POP-User: cjwhite.grierwhite.com Original-Received: from unknown (pool-108-49-4-207.bstnma.east.verizon.net [108.49.4.207]) by mail237c25.carrierzone.com (8.13.6/8.13.1) with ESMTP id q194rLRo008420 for ; Thu, 9 Feb 2012 04:53:22 GMT X-Mailer: Claws Mail 3.8.0cvs6 (GTK+ 2.16.6; i586-pc-mingw32msvc) X-CSC: 0 X-CHA: v=1.1 cv=qdcj7FnDz3iMLgEWBqV3+jpNlV01afZ0RwhqZvBJZRE= c=1 sm=1 a=euseRXvtOwMA:10 a=3pyGGIT-qAEA:10 a=IkcTkHD0fZMA:10 a=iW5S9OHVd49uhICS+jddKg==:17 a=G0BRwk1oAAAA:8 a=lfE3qB7g5qHWJGPjs7kA:9 a=LzhmfEsTCxz2ayXrZB4A:7 a=QEXdDO2ut3YA:10 a=8-SRZUljcj1cYEcQ:21 a=-0uOsexy1oTl1_WT:21 a=iW5S9OHVd49uhICS+jddKg==:117 X-CTCH-Spam: Unknown X-CTCH-RefID: str=0001.0A020208.4F335143.0099,ss=1,re=0.000,fgs=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:56707 Archived-At: I=E2=80=99m using url-http to retrieve an XML response. In noticed somewha= t by chance that certain page sizes were cutting off the last few characters of the response, which in turn caused the XML to be poorly formed. I've noticed the issue occurs when the payload response has to be sent in two TCP packets and the last packet has 8 or fewer bytes. I observe this by looking at the HTTP stream in Wireshark. I spent time tracing the response by adding some debug using url-http-debug. The first chunk of data comes from the first TCP packet and includes the HTTP header and all the XML data minus the last 8 bytes. url-http-wait-for-headers-change-function is called to process this chunk of data. After processing this chunk, the connection is closed and the buffer of XML data returned minux the 8 bytes. Here's the http trace, along with my added debug messages (inlcuding dumping of the full data): ---------------------------------------- 22:06.781000 http -> Contacting host: api.toodledo.com:80 22:06.827000 http -> Marking connection as busy: api.toodledo.com:80 #> 22:06.828000 http -> Request is:=20 POST /2/tasks/get.php HTTP/1.1=20 MIME-Version: 1.0=20 Connection: keep-alive=20 Extension: Security/Digest Security/SSL=20 Host: api.toodledo.com=20 Accept-charset: nil=20 Accept: */*=20 User-Agent: URL/Emacs (i386-mingw-nt6.1.7601; Windows-NT; 32bit)=20 Content-Type: application/x-www-form-urlencoded=20 Content-length: 212=20 =20 f=3Dxml&key=3D9f2a92de083e8d63c2bd14771661139f&unix=3D1&fields=3Dstatus%2cr= epeat%2crepeatfrom%2ccontext%2cduedate%2cduetime%2cstartdate%2cstarttime%2c= folder%2cgoal%2cpriority%2cnote%2clength%2cparent&comp=3D%2d1&modafter=3D0= =20 22:06.828000 retrieval -> Spinning in url-retrieve-synchronously: nil (#>) 22:06.889000 http -> Calling after change function `url-http-wait-for-heade= rs-change-function' for `#>' 22:06.889000 http -> data (point-max 1) (len 1380): "HTTP/1.1 200 OK=20 Date: Thu, 09 Feb 2012 04:22:06 GMT=20 Server: Apache/2.2.3 (Red Hat)=20 Content-Length: 1189=20 Keep-Alive: timeout=3D2, max=3D100=20 Connection: Keep-Alive=20 Content-Type: application/xml=20 =20 = 9105869Test 11328482938<= completed>132792480000000<= duedate>1328097600013281372000029108309Test 2 -foobar132= 87613220000000000029149333org-toodledo1328011949000020<= duedate>0000= 02 url-http-wait-for-headers-change-function ( *http api.= toodledo.com:80*<80>) 22:06.890000 http -> Saw end of headers... ( *http api.toodledo.com:80*<80>= ) @ 197 22:06.890000 http -> url-http-clean-headers, end-of-headers now at 189 22:06.890000 http -> url-http-parse-response called in ( *http api.toodledo= .com:80*<80>) 22:06.890000 http -> Got a content-length 1189, being smart about document = end. 22:06.890000 http -> Calling initial content-length for extra data at end o= f headers 22:06.890000 http -> url-http-content-length-after-change-function 189 1381= 1192 22:06.891000 http -> End of document found! 22:06.891000 http -> Marking connection as free: api.toodledo.com:80 #> 22:06.891000 http -> url-http-parse-headers called in ( *http api.toodledo.= com:80*<80>) 22:06.891000 http -> url-http-parse-response called in ( *http api.toodledo= .com:80*<80>) 22:06.891000 http -> Parsed HTTP headers: class=3D2 status=3D200 22:06.891000 http -> Finished parsing HTTP headers: t 22:06.891000 http -> Marking connection as free: api.toodledo.com:80 #> 22:06.891000 http -> Activating callback in buffer ( *http api.toodledo.com= :80*<80>) ---------------------------------------- Notice that the XML in the data finishes with "...". =20 A key debug message I added is "End of document found!", and this is placed in the function url-http-content-length-after-change-function right after the comment "Found the end of the document! Wheee!": (defun url-http-content-length-after-change-function (st nd length) <....> (if (> (- nd url-http-end-of-headers) url-http-content-length) (progn ;; Found the end of the document! Wheee! (url-http-debug "End of document found!") (url-display-percentage nil nil) (url-lazy-message "Reading... done.") (if (url-http-parse-headers) (url-http-activate-callback))))) If I slightly increase or decrease the amount of data returned by the XML (by adding or deleting characters from title), I can get it to work properly or not. =20 For example, by adding 5 chars, I get: ---------------------------------------- 39:20.144000 http -> Finding free connection: api.toodledo.com:80 39:20.144000 http -> Contacting host: api.toodledo.com:80 39:20.187000 http -> Marking connection as busy: api.toodledo.com:80 #> 39:20.188000 http -> Request is:=20 POST /2/tasks/get.php HTTP/1.1=20 MIME-Version: 1.0=20 Connection: keep-alive=20 Extension: Security/Digest Security/SSL=20 Host: api.toodledo.com=20 Accept-charset: nil=20 Accept: */*=20 User-Agent: URL/Emacs (i386-mingw-nt6.1.7601; Windows-NT; 32bit)=20 Content-Type: application/x-www-form-urlencoded=20 Content-length: 212=20 =20 f=3Dxml&key=3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&unix=3D1&fields=3Dstatus%2cr= epeat%2crepeatfrom%2ccontext%2cduedate%2cduetime%2cstartdate%2cstarttime%2c= folder%2cgoal%2cpriority%2cnote%2clength%2cparent&comp=3D%2d1&modafter=3D0= =20 39:20.188000 retrieval -> Spinning in url-retrieve-synchronously: nil (#>) 39:20.242000 http -> Calling after change function `url-http-wait-for-heade= rs-change-function' for `#>' 39:20.243000 http -> data (point-max 1) (len 1380): "HTTP/1.1 200 OK=20 Date: Thu, 09 Feb 2012 04:39:20 GMT=20 Server: Apache/2.2.3 (Red Hat)=20 Content-Length: 1194=20 Keep-Alive: timeout=3D2, max=3D100=20 Connection: Keep-Alive=20 Content-Type: application/xml=20 =20 = 9105869Test 11328482938<= completed>132792480000000<= duedate>1328097600013281372000029108309Test 2 -foobar123451328762353000= 00= 00000029149333org-toodledo13280119= 49000= 020000002 url-http-wait-for-headers-change-function ( *http api.= toodledo.com:80*<86>) 39:20.243000 http -> Saw end of headers... ( *http api.toodledo.com:80*<86>= ) @ 197 39:20.243000 http -> url-http-clean-headers, end-of-headers now at 189 39:20.243000 http -> url-http-parse-response called in ( *http api.toodledo= .com:80*<86>) 39:20.243000 http -> Got a content-length 1194, being smart about document = end. 39:20.243000 http -> Calling initial content-length for extra data at end o= f headers 39:20.243000 http -> url-http-content-length-after-change-function 189 1381= 1192 39:20.244000 http -> Spinning waiting for headers... 39:20.244000 retrieval -> Spinning in url-retrieve-synchronously: nil (#>) 39:20.247000 http -> Calling after change function `url-http-content-length= -after-change-function' for `#>' 39:20.247000 http -> data (point-max 1373) (len 11): "sk>" 39:20.247000 http -> url-http-content-length-after-change-function 1373 138= 4 11 39:20.247000 http -> End of document found! 39:20.247000 http -> Marking connection as free: api.toodledo.com:80 #> 39:20.247000 http -> url-http-parse-headers called in ( *http api.toodledo.= com:80*<86>) 39:20.247000 http -> url-http-parse-response called in ( *http api.toodledo= .com:80*<86>) 39:20.247000 http -> Parsed HTTP headers: class=3D2 status=3D200 39:20.248000 http -> Finished parsing HTTP headers: t 39:20.248000 http -> Marking connection as free: api.toodledo.com:80 #> 39:20.248000 http -> Activating callback in buffer ( *http api.toodledo.com= :80*<86>) ---------------------------------------- In this case, url-http waits for the remaining data from the second TCP packet, which comes in slightly later and is pieced together and forms a good XML document. If I reduce the size by an appropriate number of bytes so that the XML data fits entirely in the first packet it also works.=20 I think the problem relates to url-http-clean-headers. I have 8-lines of headers, and this function removes the trailing \r from each of those lines. I think this is not accounted for when using the content-length to determine if all the data has been received. After dropping these 8 trailing \r charaters, the buffer positions all change. =20 I'm not quite able to figure out how the content-length is used to detect the end of processing, so I thought I'd submit this bug and see if any other folks can point me in the right direction. ...cj In GNU Emacs 23.3.1 (i386-mingw-nt6.1.7601) of 2011-03-10 on 3249CTO Windowing system distributor `Microsoft Corp.', version 6.1.7601 configured using `configure --with-gcc (4.5) --no-opt --cflags -Ic:/imagesu= pport/include' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: C.UTF-8 value of $XMODIFIERS: nil locale-coding-system: cp1252 default enable-multibyte-characters: t Major mode: Fundamental Minor modes in effect: show-paren-mode: t display-time-mode: t tooltip-mode: t mouse-wheel-mode: t global-font-lock-mode: t auto-encryption-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Recent input: - - - - - - - - - - - - - - - - =20 C-x=20 C-/ C-/ C-/ C-/ SPC C-/=20 C-/ C-a C-x [ C-x ] C-x [ C-/ C-/ C-/ C-x=20 [ C-SPC C-x ] C-w C-/ C-/ C-/ C-/ C-/ C-/ C-/ C-/ C-a=20 C-o s =20 C-SPC C-x ] =20 =20 =20 =20 =20 C-w =20 C-x 2 =20 =20 C-s C-w C-w C-w C-w C-w C-w C-w C-x=20 o C-s C-s C-a C-a C-l C-n C-n C-n C-n C-n=20 C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n =20 C-x o C-p C-n C-n C-n C-n C-n=20 C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-l=20 C-n C-n C-l C-n C-n C-n C-n C-n C-l C-n C-n C-n C-n=20 C-l C-x o C-n C-n C-n =20 =20 =20 C-o s =20 C-x ] =20 =20 SPC C-x =20 C-x o C-o s =20 C-x ] C-r t a s k s C-r=20 C-r C-r C-s C-a =20 =20 x r e p o =20 r t SPC e m SPC SPC Recent messages: Reading [application/xml=20 ]... 1k of 1k (100%) Contacting host: api.toodledo.com:80 Reading [application/xml=20 ]... 718 bytes of 717 bytes (100%) Sync complete, 794 changes: recv 3 mod 791 del=20 Mark set Mark saved where search started Auto-saving...done Making completion list... Load-path shadows: ~cwhite/lib/lisp/org-toodledo/w3mexcerpt hides ~cwhite/lib/lisp/w3mexcerpt ~cwhite/lib/lisp/org-toodledo/http-post-simple hides ~cwhite/lib/lisp/http-= post-simple ~/lib/lisp/org-mode/lisp/org hides c:/Users/cwhite/emacs-23.3/lisp/org/org ~/lib/lisp/org-mode/lisp/org-xoxo hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-xoxo ~/lib/lisp/org-mode/lisp/org-wl hides c:/Users/cwhite/emacs-23.3/lisp/org/o= rg-wl ~/lib/lisp/org-mode/lisp/org-w3m hides c:/Users/cwhite/emacs-23.3/lisp/org/= org-w3m ~/lib/lisp/org-mode/lisp/org-vm hides c:/Users/cwhite/emacs-23.3/lisp/org/o= rg-vm ~/lib/lisp/org-mode/lisp/org-timer hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-timer ~/lib/lisp/org-mode/lisp/org-table hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-table ~/lib/lisp/org-mode/lisp/org-src hides c:/Users/cwhite/emacs-23.3/lisp/org/= org-src ~/lib/lisp/org-mode/lisp/org-rmail hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-rmail ~/lib/lisp/org-mode/lisp/org-remember hides c:/Users/cwhite/emacs-23.3/lisp= /org/org-remember ~/lib/lisp/org-mode/lisp/org-publish hides c:/Users/cwhite/emacs-23.3/lisp/= org/org-publish ~/lib/lisp/org-mode/lisp/org-protocol hides c:/Users/cwhite/emacs-23.3/lisp= /org/org-protocol ~/lib/lisp/org-mode/lisp/org-plot hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-plot ~/lib/lisp/org-mode/lisp/org-mouse hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-mouse ~/lib/lisp/org-mode/lisp/org-mobile hides c:/Users/cwhite/emacs-23.3/lisp/o= rg/org-mobile ~/lib/lisp/org-mode/lisp/org-mhe hides c:/Users/cwhite/emacs-23.3/lisp/org/= org-mhe ~/lib/lisp/org-mode/lisp/org-mew hides c:/Users/cwhite/emacs-23.3/lisp/org/= org-mew ~/lib/lisp/org-mode/lisp/org-macs hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-macs ~/lib/lisp/org-mode/lisp/org-mac-message hides c:/Users/cwhite/emacs-23.3/l= isp/org/org-mac-message ~/lib/lisp/org-mode/lisp/org-list hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-list ~/lib/lisp/org-mode/lisp/org-latex hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-latex ~/lib/lisp/org-mode/lisp/org-jsinfo hides c:/Users/cwhite/emacs-23.3/lisp/o= rg/org-jsinfo ~/lib/lisp/org-mode/lisp/org-irc hides c:/Users/cwhite/emacs-23.3/lisp/org/= org-irc ~/lib/lisp/org-mode/lisp/org-install hides c:/Users/cwhite/emacs-23.3/lisp/= org/org-install ~/lib/lisp/org-mode/lisp/org-inlinetask hides c:/Users/cwhite/emacs-23.3/li= sp/org/org-inlinetask ~/lib/lisp/org-mode/lisp/org-info hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-info ~/lib/lisp/org-mode/lisp/org-indent hides c:/Users/cwhite/emacs-23.3/lisp/o= rg/org-indent ~/lib/lisp/org-mode/lisp/org-id hides c:/Users/cwhite/emacs-23.3/lisp/org/o= rg-id ~/lib/lisp/org-mode/lisp/org-icalendar hides c:/Users/cwhite/emacs-23.3/lis= p/org/org-icalendar ~/lib/lisp/org-mode/lisp/org-html hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-html ~/lib/lisp/org-mode/lisp/org-habit hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-habit ~/lib/lisp/org-mode/lisp/org-gnus hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-gnus ~/lib/lisp/org-mode/lisp/org-freemind hides c:/Users/cwhite/emacs-23.3/lisp= /org/org-freemind ~/lib/lisp/org-mode/lisp/org-footnote hides c:/Users/cwhite/emacs-23.3/lisp= /org/org-footnote ~/lib/lisp/org-mode/lisp/org-feed hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-feed ~/lib/lisp/org-mode/lisp/org-faces hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-faces ~/lib/lisp/org-mode/lisp/org-exp hides c:/Users/cwhite/emacs-23.3/lisp/org/= org-exp ~/lib/lisp/org-mode/lisp/org-exp-blocks hides c:/Users/cwhite/emacs-23.3/li= sp/org/org-exp-blocks ~/lib/lisp/org-mode/lisp/org-docbook hides c:/Users/cwhite/emacs-23.3/lisp/= org/org-docbook ~/lib/lisp/org-mode/lisp/org-datetree hides c:/Users/cwhite/emacs-23.3/lisp= /org/org-datetree ~/lib/lisp/org-mode/lisp/org-crypt hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-crypt ~/lib/lisp/org-mode/lisp/org-compat hides c:/Users/cwhite/emacs-23.3/lisp/o= rg/org-compat ~/lib/lisp/org-mode/lisp/org-colview hides c:/Users/cwhite/emacs-23.3/lisp/= org/org-colview ~/lib/lisp/org-mode/lisp/org-clock hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-clock ~/lib/lisp/org-mode/lisp/org-bibtex hides c:/Users/cwhite/emacs-23.3/lisp/o= rg/org-bibtex ~/lib/lisp/org-mode/lisp/org-bbdb hides c:/Users/cwhite/emacs-23.3/lisp/org= /org-bbdb ~/lib/lisp/org-mode/lisp/org-attach hides c:/Users/cwhite/emacs-23.3/lisp/o= rg/org-attach ~/lib/lisp/org-mode/lisp/org-ascii hides c:/Users/cwhite/emacs-23.3/lisp/or= g/org-ascii ~/lib/lisp/org-mode/lisp/org-archive hides c:/Users/cwhite/emacs-23.3/lisp/= org/org-archive ~/lib/lisp/org-mode/lisp/org-agenda hides c:/Users/cwhite/emacs-23.3/lisp/o= rg/org-agenda Features: (shadow sort mail-extr message ecomplete rfc822 mml mml-sec password-cache mm-decode mm-bodies mm-encode mailabbrev nnheader gnus-util netrc gmm-utils mailheader canlock sha1 hex-util hashcash emacsbug sgml-mode cl-specs edebug find-func vc-git nxml-uchnm rng-xsd xsd-regexp rng-cmpct rng-nxml rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap nxml-util nxml-glyph nxml-enc xmltok browse-url cperl-mode url-cache org-colview diary-lib diary-loaddefs cal-iso org-table bookmark pp image-file mule-util grep sh-script executable tabify org-ascii help-mode view org-wl org-w3m org-vm org-rmail org-mhe org-mew org-irc org-jsinfo org-infojs org-html format-spec org-exp ob-exp org-exp-blocks org-agenda org-info org-gnus org-docview org-bibtex bibtex org-bbdb multi-isearch newcomment org-toodledo http-post-simple url-http tls url-auth mail-parse rfc2231 rfc2047 rfc2045 qp ietf-drums url-gw url url-proxy url-privacy url-expand url-methods url-history url-cookie url-util url-parse url-vars mm-util mail-prsvr mailcap json xml w3mexcerpt remember org-remember org-datetree org ob-emacs-lisp ob-tangle ob-ref ob-lob ob-table org-footnote org-src ob-comint ob-keys ob ob-eval org-pcomplete pcomplete org-list org-faces org-compat org-entities org-macs time-date noutline outline easy-mmode cal-menu calendar cal-loaddefs cygwin-mount ange-ftp uniquify filecache server byte-opt warnings advice help-fns advice-preload paren time etags python-mode info-look css-mode scr rsync twiki edmacro kmacro info doku pib php-mode speedbar sb-image ezimage dframe assoc highline pop3 mail-utils cl cl-19 cc-mode cc-fonts cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs regexp-opt cus-edit easymenu cus-start cus-load wid-edit exec compile comint ring bytecomp byte-compile tooltip ediff-hook vc-hooks lisp-float-type mwheel dos-w32 disp-table ls-lisp w32-win w32-vars tool-bar dnd fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mldrag mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev loaddefs button minibuffer faces cus-face files text-properties overlay md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process multi-tty emacs)