[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Nmh-commits] nmh ChangeLog sbr/m_getfld.c test/common.sh tes...

From: Peter Maydell
Subject: [Nmh-commits] nmh ChangeLog sbr/m_getfld.c test/common.sh tes...
Date: Fri, 26 Dec 2008 21:54:21 +0000

CVSROOT:        /cvsroot/nmh
Module name:    nmh
Changes by:     Peter Maydell <pm215>   08/12/26 21:54:21

Modified files:
        .              : ChangeLog 
        sbr            : m_getfld.c 
        test           : common.sh 
Added files:
        test/tests/inc : deb359167.mbox filler.txt fromline.txt md5sums 
                         msgheader.txt test-deb359167 test-eom-align 

Log message:
        * sbr/m_getfld.c: fix two bugs which could cause us to walk off
        the beginning of the stdio or prefix-string buffer when checking
        for presence of the end-of-message delimiter in some situations.
        This might cause inc to dump core if you were unlucky. (This was
        Debian bug 359167.)
        * test/tests/inc/{md5sums,msgheader.txt,test-deb359167,
        test-eom-align,fromline.txt,filler.txt,deb359167.mbox}: new tests
        both for the specific problem and to try to check various alignments
        of the eom string with the stdio buffer ending.
        * test/common.sh: Added some functions for doing progress indicators. 


Index: ChangeLog
RCS file: /cvsroot/nmh/nmh/ChangeLog,v
retrieving revision 1.301
retrieving revision 1.302
diff -u -b -r1.301 -r1.302
--- ChangeLog   26 Dec 2008 16:32:07 -0000      1.301
+++ ChangeLog   26 Dec 2008 21:54:19 -0000      1.302
@@ -1,8 +1,17 @@
 2008-12-26  Peter Maydell  <address@hidden>
+       * sbr/m_getfld.c: fix two bugs which could cause us to walk off
+       the beginning of the stdio or prefix-string buffer when checking
+       for presence of the end-of-message delimiter in some situations.
+       This might cause inc to dump core if you were unlucky. (This was
+       Debian bug 359167.)
+       * test/tests/inc/{md5sums,msgheader.txt,test-deb359167,
+       test-eom-align,fromline.txt,filler.txt,deb359167.mbox}: new tests
+       both for the specific problem and to try to check various alignments
+       of the eom string with the stdio buffer ending.
        * test/common.sh: new file for common utility functions for the
        test scripts. Moved findprog out of manpage test script into this
-       new file.
+       new file. Added some functions for doing progress indicators.
 2008-12-25  Peter Maydell  <address@hidden>

Index: sbr/m_getfld.c
RCS file: /cvsroot/nmh/nmh/sbr/m_getfld.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- sbr/m_getfld.c      23 Oct 2008 18:14:53 -0000      1.16
+++ sbr/m_getfld.c      26 Dec 2008 21:54:20 -0000      1.17
@@ -2,7 +2,7 @@
  * m_getfld.c -- read/parse a message
- * $Id: m_getfld.c,v 1.16 2008/10/23 18:14:53 levine Exp $
+ * $Id: m_getfld.c,v 1.17 2008/12/26 21:54:20 pm215 Exp $
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
@@ -522,22 +522,35 @@
                    ep = bp + c - 1;
                    if ((sp = pat_map[*ep])) {
                        do {
+                           /* This if() is true unless (a) the buffer is too
+                            * small to contain this delimiter prefix, or
+                            * (b) it contains exactly enough chars for the
+                            * delimiter prefix.
+                            * For case (a) obviously we aren't going to match.
+                            * For case (b), if the buffer really contained 
+                            * a delim prefix, then the m_eom call at entry
+                            * should have found it.  Thus it's not a delim
+                            * and we know we won't get a match.
+                            */
+                           if (((sp - fdelim) + 2) <= c) {
                            cp = sp;
+                               /* Unfortunately although fdelim has a 
preceding NUL
+                                * we can't use this as a sentinel in case the 
+                                * contains a NUL in exactly the wrong place 
+                                * would cause us to run off the front of 
+                                */
                            while (*--ep == *--cp)
-                           ;
+                                   if (cp < fdelim)
+                                       break;
                            if (cp < fdelim) {
-                               if (ep >= bp)
-                                   /*
-                                    * ep < bp means that all the buffer
-                                    * contains is a prefix of delim.
-                                    * If this prefix is really a delim, the
-                                    * m_eom call at entry should have found
-                                    * it.  Thus it's not a delim and we can
-                                    * take all of it.
+                                   /* we matched the entire delim prefix,
+                                    * so only take the buffer up to there.
+                                    * we know ep >= bp -- check above prevents 
                                    c = (ep - bp) + 2;
+                           }
                            /* try matching one less char of delim string */
                            ep = bp + c - 1;
                        } while (--sp > fdelim);

Index: test/common.sh
RCS file: /cvsroot/nmh/nmh/test/common.sh,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/common.sh      26 Dec 2008 16:32:07 -0000      1.1
+++ test/common.sh      26 Dec 2008 21:54:20 -0000      1.2
@@ -31,3 +31,22 @@
     test_skip "missing $1"
+# Some stuff for doing silly progress indicators
+progress_update ()
+  THIS="$1"
+  FIRST="$2"
+  LAST="$3"
+  RANGE="$(($LAST - $FIRST))"
+  PROG="$(($THIS - $FIRST))"
+  # this automatically rounds to nearest integer
+  PERC="$(((100 * $PROG) / $RANGE))"
+  # note \r so next update will overwrite
+  printf "%3d%%\r" $PERC
+progress_done ()
+  printf "100%%\n"

Index: test/tests/inc/deb359167.mbox
RCS file: test/tests/inc/deb359167.mbox
diff -N test/tests/inc/deb359167.mbox
Binary files /dev/null and /tmp/cvskk18jb differ

Index: test/tests/inc/filler.txt
RCS file: test/tests/inc/filler.txt
diff -N test/tests/inc/filler.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/tests/inc/filler.txt   26 Dec 2008 21:54:20 -0000      1.1
@@ -0,0 +1,356 @@
+IN the year 1878 I took my degree of Doctor of Medicine of the
+University of London, and proceeded to Netley to go through the course
+prescribed for surgeons in the army. Having completed my studies there,
+I was duly attached to the Fifth Northumberland Fusiliers as Assistant
+Surgeon. The regiment was stationed in India at the time, and before
+I could join it, the second Afghan war had broken out. On landing at
+Bombay, I learned that my corps had advanced through the passes, and
+was already deep in the enemy's country. I followed, however, with many
+other officers who were in the same situation as myself, and succeeded
+in reaching Candahar in safety, where I found my regiment, and at once
+entered upon my new duties.
+The campaign brought honours and promotion to many, but for me it had
+nothing but misfortune and disaster. I was removed from my brigade and
+attached to the Berkshires, with whom I served at the fatal battle of
+Maiwand. There I was struck on the shoulder by a Jezail bullet, which
+shattered the bone and grazed the subclavian artery. I should have
+fallen into the hands of the murderous Ghazis had it not been for the
+devotion and courage shown by Murray, my orderly, who threw me across a
+pack-horse, and succeeded in bringing me safely to the British lines.
+Worn with pain, and weak from the prolonged hardships which I had
+undergone, I was removed, with a great train of wounded sufferers, to
+the base hospital at Peshawar. Here I rallied, and had already improved
+so far as to be able to walk about the wards, and even to bask a little
+upon the verandah, when I was struck down by enteric fever, that curse
+of our Indian possessions. For months my life was despaired of, and
+when at last I came to myself and became convalescent, I was so weak and
+emaciated that a medical board determined that not a day should be lost
+in sending me back to England. I was dispatched, accordingly, in the
+troopship "Orontes," and landed a month later on Portsmouth jetty, with
+my health irretrievably ruined, but with permission from a paternal
+government to spend the next nine months in attempting to improve it.
+I had neither kith nor kin in England, and was therefore as free as
+air--or as free as an income of eleven shillings and sixpence a day will
+permit a man to be. Under such circumstances, I naturally gravitated to
+London, that great cesspool into which all the loungers and idlers of
+the Empire are irresistibly drained. There I stayed for some time at
+a private hotel in the Strand, leading a comfortless, meaningless
+existence, and spending such money as I had, considerably more freely
+than I ought. So alarming did the state of my finances become, that
+I soon realized that I must either leave the metropolis and rusticate
+somewhere in the country, or that I must make a complete alteration in
+my style of living. Choosing the latter alternative, I began by making
+up my mind to leave the hotel, and to take up my quarters in some less
+pretentious and less expensive domicile.
+On the very day that I had come to this conclusion, I was standing at
+the Criterion Bar, when some one tapped me on the shoulder, and turning
+round I recognized young Stamford, who had been a dresser under me at
+Barts. The sight of a friendly face in the great wilderness of London is
+a pleasant thing indeed to a lonely man. In old days Stamford had never
+been a particular crony of mine, but now I hailed him with enthusiasm,
+and he, in his turn, appeared to be delighted to see me. In the
+exuberance of my joy, I asked him to lunch with me at the Holborn, and
+we started off together in a hansom.
+"Whatever have you been doing with yourself, Watson?" he asked in
+undisguised wonder, as we rattled through the crowded London streets.
+"You are as thin as a lath and as brown as a nut."
+I gave him a short sketch of my adventures, and had hardly concluded it
+by the time that we reached our destination.
+"Poor devil!" he said, commiseratingly, after he had listened to my
+misfortunes. "What are you up to now?"
+"Looking for lodgings." [3] I answered. "Trying to solve the problem
+as to whether it is possible to get comfortable rooms at a reasonable
+"That's a strange thing," remarked my companion; "you are the second man
+to-day that has used that expression to me."
+"And who was the first?" I asked.
+"A fellow who is working at the chemical laboratory up at the hospital.
+He was bemoaning himself this morning because he could not get someone
+to go halves with him in some nice rooms which he had found, and which
+were too much for his purse."
+"By Jove!" I cried, "if he really wants someone to share the rooms and
+the expense, I am the very man for him. I should prefer having a partner
+to being alone."
+Young Stamford looked rather strangely at me over his wine-glass. "You
+don't know Sherlock Holmes yet," he said; "perhaps you would not care
+for him as a constant companion."
+"Why, what is there against him?"
+"Oh, I didn't say there was anything against him. He is a little queer
+in his ideas--an enthusiast in some branches of science. As far as I
+know he is a decent fellow enough."
+"A medical student, I suppose?" said I.
+"No--I have no idea what he intends to go in for. I believe he is well
+up in anatomy, and he is a first-class chemist; but, as far as I know,
+he has never taken out any systematic medical classes. His studies are
+very desultory and eccentric, but he has amassed a lot of out-of-the way
+knowledge which would astonish his professors."
+"Did you never ask him what he was going in for?" I asked.
+"No; he is not a man that it is easy to draw out, though he can be
+communicative enough when the fancy seizes him."
+"I should like to meet him," I said. "If I am to lodge with anyone, I
+should prefer a man of studious and quiet habits. I am not strong
+enough yet to stand much noise or excitement. I had enough of both in
+Afghanistan to last me for the remainder of my natural existence. How
+could I meet this friend of yours?"
+"He is sure to be at the laboratory," returned my companion. "He either
+avoids the place for weeks, or else he works there from morning to
+night. If you like, we shall drive round together after luncheon."
+"Certainly," I answered, and the conversation drifted away into other
+As we made our way to the hospital after leaving the Holborn, Stamford
+gave me a few more particulars about the gentleman whom I proposed to
+take as a fellow-lodger.
+"You mustn't blame me if you don't get on with him," he said; "I know
+nothing more of him than I have learned from meeting him occasionally in
+the laboratory. You proposed this arrangement, so you must not hold me
+"If we don't get on it will be easy to part company," I answered. "It
+seems to me, Stamford," I added, looking hard at my companion, "that you
+have some reason for washing your hands of the matter. Is this fellow's
+temper so formidable, or what is it? Don't be mealy-mouthed about it."
+"It is not easy to express the inexpressible," he answered with a laugh.
+"Holmes is a little too scientific for my tastes--it approaches to
+cold-bloodedness. I could imagine his giving a friend a little pinch of
+the latest vegetable alkaloid, not out of malevolence, you understand,
+but simply out of a spirit of inquiry in order to have an accurate idea
+of the effects. To do him justice, I think that he would take it himself
+with the same readiness. He appears to have a passion for definite and
+exact knowledge."
+"Very right too."
+"Yes, but it may be pushed to excess. When it comes to beating the
+subjects in the dissecting-rooms with a stick, it is certainly taking
+rather a bizarre shape."
+"Beating the subjects!"
+"Yes, to verify how far bruises may be produced after death. I saw him
+at it with my own eyes."
+"And yet you say he is not a medical student?"
+"No. Heaven knows what the objects of his studies are. But here we
+are, and you must form your own impressions about him." As he spoke, we
+turned down a narrow lane and passed through a small side-door, which
+opened into a wing of the great hospital. It was familiar ground to me,
+and I needed no guiding as we ascended the bleak stone staircase and
+made our way down the long corridor with its vista of whitewashed
+wall and dun-coloured doors. Near the further end a low arched passage
+branched away from it and led to the chemical laboratory.
+This was a lofty chamber, lined and littered with countless bottles.
+Broad, low tables were scattered about, which bristled with retorts,
+test-tubes, and little Bunsen lamps, with their blue flickering flames.
+There was only one student in the room, who was bending over a distant
+table absorbed in his work. At the sound of our steps he glanced round
+and sprang to his feet with a cry of pleasure. "I've found it! I've
+found it," he shouted to my companion, running towards us with a
+test-tube in his hand. "I have found a re-agent which is precipitated
+by hoemoglobin, [4] and by nothing else." Had he discovered a gold mine,
+greater delight could not have shone upon his features.
+"Dr. Watson, Mr. Sherlock Holmes," said Stamford, introducing us.
+"How are you?" he said cordially, gripping my hand with a strength
+for which I should hardly have given him credit. "You have been in
+Afghanistan, I perceive."
+"How on earth did you know that?" I asked in astonishment.
+"Never mind," said he, chuckling to himself. "The question now is about
+hoemoglobin. No doubt you see the significance of this discovery of
+"It is interesting, chemically, no doubt," I answered, "but
+"Why, man, it is the most practical medico-legal discovery for years.
+Don't you see that it gives us an infallible test for blood stains. Come
+over here now!" He seized me by the coat-sleeve in his eagerness, and
+drew me over to the table at which he had been working. "Let us have
+some fresh blood," he said, digging a long bodkin into his finger, and
+drawing off the resulting drop of blood in a chemical pipette. "Now, I
+add this small quantity of blood to a litre of water. You perceive that
+the resulting mixture has the appearance of pure water. The proportion
+of blood cannot be more than one in a million. I have no doubt, however,
+that we shall be able to obtain the characteristic reaction." As he
+spoke, he threw into the vessel a few white crystals, and then added
+some drops of a transparent fluid. In an instant the contents assumed a
+dull mahogany colour, and a brownish dust was precipitated to the bottom
+of the glass jar.
+"Ha! ha!" he cried, clapping his hands, and looking as delighted as a
+child with a new toy. "What do you think of that?"
+"It seems to be a very delicate test," I remarked.
+"Beautiful! beautiful! The old Guiacum test was very clumsy and
+uncertain. So is the microscopic examination for blood corpuscles. The
+latter is valueless if the stains are a few hours old. Now, this appears
+to act as well whether the blood is old or new. Had this test been
+invented, there are hundreds of men now walking the earth who would long
+ago have paid the penalty of their crimes."
+"Indeed!" I murmured.
+"Criminal cases are continually hinging upon that one point. A man is
+suspected of a crime months perhaps after it has been committed. His
+linen or clothes are examined, and brownish stains discovered upon them.
+Are they blood stains, or mud stains, or rust stains, or fruit stains,
+or what are they? That is a question which has puzzled many an expert,
+and why? Because there was no reliable test. Now we have the Sherlock
+Holmes' test, and there will no longer be any difficulty."
+His eyes fairly glittered as he spoke, and he put his hand over his
+heart and bowed as if to some applauding crowd conjured up by his
+"You are to be congratulated," I remarked, considerably surprised at his
+"There was the case of Von Bischoff at Frankfort last year. He would
+certainly have been hung had this test been in existence. Then there was
+Mason of Bradford, and the notorious Muller, and Lefevre of Montpellier,
+and Samson of new Orleans. I could name a score of cases in which it
+would have been decisive."
+"You seem to be a walking calendar of crime," said Stamford with a
+laugh. "You might start a paper on those lines. Call it the 'Police News
+of the Past.'"
+"Very interesting reading it might be made, too," remarked Sherlock
+Holmes, sticking a small piece of plaster over the prick on his finger.
+"I have to be careful," he continued, turning to me with a smile, "for I
+dabble with poisons a good deal." He held out his hand as he spoke, and
+I noticed that it was all mottled over with similar pieces of plaster,
+and discoloured with strong acids.
+"We came here on business," said Stamford, sitting down on a high
+three-legged stool, and pushing another one in my direction with
+his foot. "My friend here wants to take diggings, and as you were
+complaining that you could get no one to go halves with you, I thought
+that I had better bring you together."
+Sherlock Holmes seemed delighted at the idea of sharing his rooms with
+me. "I have my eye on a suite in Baker Street," he said, "which would
+suit us down to the ground. You don't mind the smell of strong tobacco,
+I hope?"
+"I always smoke 'ship's' myself," I answered.
+"That's good enough. I generally have chemicals about, and occasionally
+do experiments. Would that annoy you?"
+"By no means."
+"Let me see--what are my other shortcomings. I get in the dumps at
+times, and don't open my mouth for days on end. You must not think I am
+sulky when I do that. Just let me alone, and I'll soon be right. What
+have you to confess now? It's just as well for two fellows to know the
+worst of one another before they begin to live together."
+I laughed at this cross-examination. "I keep a bull pup," I said, "and
+I object to rows because my nerves are shaken, and I get up at all sorts
+of ungodly hours, and I am extremely lazy. I have another set of vices
+when I'm well, but those are the principal ones at present."
+"Do you include violin-playing in your category of rows?" he asked,
+"It depends on the player," I answered. "A well-played violin is a treat
+for the gods--a badly-played one----"
+"Oh, that's all right," he cried, with a merry laugh. "I think we may
+consider the thing as settled--that is, if the rooms are agreeable to
+"When shall we see them?"
+"Call for me here at noon to-morrow, and we'll go together and settle
+everything," he answered.
+"All right--noon exactly," said I, shaking his hand.
+We left him working among his chemicals, and we walked together towards
+my hotel.
+"By the way," I asked suddenly, stopping and turning upon Stamford, "how
+the deuce did he know that I had come from Afghanistan?"
+My companion smiled an enigmatical smile. "That's just his little
+peculiarity," he said. "A good many people have wanted to know how he
+finds things out."
+"Oh! a mystery is it?" I cried, rubbing my hands. "This is very piquant.
+I am much obliged to you for bringing us together. 'The proper study of
+mankind is man,' you know."
+"You must study him, then," Stamford said, as he bade me good-bye.
+"You'll find him a knotty problem, though. I'll wager he learns more
+about you than you about him. Good-bye."
+"Good-bye," I answered, and strolled on to my hotel, considerably
+interested in my new acquaintance.
+WE met next day as he had arranged, and inspected the rooms at No. 221B,
+Baker Street, of which he had spoken at our meeting. They
+consisted of a couple of comfortable bed-rooms and a single large
+airy sitting-room, cheerfully furnished, and illuminated by two broad
+windows. So desirable in every way were the apartments, and so moderate
+did the terms seem when divided between us, that the bargain was
+concluded upon the spot, and we at once entered into possession.
+That very evening I moved my things round from the hotel, and on the
+following morning Sherlock Holmes followed me with several boxes and
+portmanteaus. For a day or two we were busily employed in unpacking and
+laying out our property to the best advantage. That done, we
+gradually began to settle down and to accommodate ourselves to our new
+Holmes was certainly not a difficult man to live with. He was quiet
+in his ways, and his habits were regular. It was rare for him to be
+up after ten at night, and he had invariably breakfasted and gone out
+before I rose in the morning. Sometimes he spent his day at the chemical
+laboratory, sometimes in the dissecting-rooms, and occasionally in long
+walks, which appeared to take him into the lowest portions of the City.
+Nothing could exceed his energy when the working fit was upon him; but
+now and again a reaction would seize him, and for days on end he would
+lie upon the sofa in the sitting-room, hardly uttering a word or moving
+a muscle from morning to night. On these occasions I have noticed such
+a dreamy, vacant expression in his eyes, that I might have suspected him
+of being addicted to the use of some narcotic, had not the temperance
+and cleanliness of his whole life forbidden such a notion.

Index: test/tests/inc/fromline.txt
RCS file: test/tests/inc/fromline.txt
diff -N test/tests/inc/fromline.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/tests/inc/fromline.txt 26 Dec 2008 21:54:20 -0000      1.1
@@ -0,0 +1 @@
+From address@hidden Fri Dec 26 15:03:52 2008

Index: test/tests/inc/md5sums
RCS file: test/tests/inc/md5sums
diff -N test/tests/inc/md5sums
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/tests/inc/md5sums      26 Dec 2008 21:54:20 -0000      1.1
@@ -0,0 +1,3 @@
+4112b1460e11bd94d30944dd464a6662  filler.txt
+023aad60eab43f06cf525869a833beb4  fromline.txt
+4fda7f16b29d757413cb928d6ffc5aa5  msgheader.txt

Index: test/tests/inc/msgheader.txt
RCS file: test/tests/inc/msgheader.txt
diff -N test/tests/inc/msgheader.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/tests/inc/msgheader.txt        26 Dec 2008 21:54:20 -0000      1.1
@@ -0,0 +1,5 @@
+From: Test <address@hidden>
+To: Some User <address@hidden>
+Date: Fri, 29 Sep 2006 00:00:00
+Subject: Testing message

Index: test/tests/inc/test-deb359167
RCS file: test/tests/inc/test-deb359167
diff -N test/tests/inc/test-deb359167
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/tests/inc/test-deb359167       26 Dec 2008 21:54:20 -0000      1.1
@@ -0,0 +1,18 @@
+# Test a variant of a mailbox which caused debian bug 359167.
+set -e
+. common.sh
+require_prog valgrind
+if [ "$(md5sum "$TESTMBOX" | cut -d ' ' -f 1)" != 
"e6ac458b8cccba2b2fd866fb505aeb5e" ]; then 
+  echo "Test mailbox has been corrupted"
+  exit 1
+valgrind --error-exitcode=1 --quiet inc -silent -file "$TESTMBOX"

Index: test/tests/inc/test-eom-align
RCS file: test/tests/inc/test-eom-align
diff -N test/tests/inc/test-eom-align
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/tests/inc/test-eom-align       26 Dec 2008 21:54:21 -0000      1.1
@@ -0,0 +1,123 @@
+# Test all combinations of alignment of the end-of-message delimiter
+# with the end of a stdio buffer
+set -e
+. common.sh
+if [ ! -z "$VALGRIND_ME" ]; then
+    require_prog valgrind
+    # Lack of quotes here is important
+    VALGRIND="valgrind --quiet --error-exitcode=1"
+    echo "Running tests under valgrind: takes ages!"
+# First check that all our various pieces of text are
+# intact. (Since we're dealing in exact byte alignment
+# minor corruptions such as line ending changes could
+# render the tests useless.)
+(cd "$THISDIR" && md5sum *.txt > "$MH_TEST_DIR/inctest.md5sums")
+diff -u "$THISDIR/md5sums" "$MH_TEST_DIR/inctest.md5sums"
+if grep -q From "$FILLER"; then
+   echo "Somebody's messed with $FILLER -- it must not contain"
+   echo "anything that might look like a message delimiter!"
+   exit 1
+# a sort of worst-case guess for the buffer size;
+# obviously a buffer boundary for this will be a boundary
+# for any smaller power of two size.
+# If you need to increase this you'll need to make filler.txt
+# bigger as well.
+FROMLINESZ="$(wc -c "$FROMLINE" | cut -d ' ' -f 1)"
+HDRSZ="$(wc -c "$HDR" | cut -d ' ' -f 1)"
+# makembox_A mboxname sz
+# Assemble a mailbox into file mboxname, with two messages, such
+# that the first is exactly sz bytes long (including its header
+# and its initial 'From' line and the newline which terminates it
+# but not the newline which mbox format demands after each message)
+# We also leave the body of message one in mboxname.body
+# (the body of message two is always $FILLER in its entirety)
+makembox_A () {
+  MBOX="$1"
+  SZ=$2
+  WANTSZ="$(($SZ - $HDRSZ - $FROMLINESZ - 1))"
+  dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
+  echo >> "$MBOX.body"
+  cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
+  echo >> "$MBOX"
+  cat "$FROMLINE" "$HDR" "$FILLER" >> "$MBOX"
+  echo >> "$MBOX"
+# make_mbox_B mboxname sz
+# Test B makes a mailbox with one message of sz bytes long,
+# which ends in a partial mbox delimiter (ie part of the string
+# \n\nFrom '). To both do this and be a valid mbox this means
+# it has to end with two newlines (one of which is in the message
+# body and one of which is the mbox format mandated one)
+makembox_B () {
+  MBOX="$1"
+  SZ=$2
+  WANTSZ="$(($SZ - $HDRSZ - $FROMLINESZ - 1))"
+  dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
+  echo >> "$MBOX.body"
+  cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
+  echo >> "$MBOX"
+# do_one_test_A sz
+# Do a single test with message one's body of size sz.
+do_one_test_A () {
+  SZ=$1
+  makembox_A "$MH_TEST_DIR/eom-align.mbox" $STDIO_BUFSZ
+  $VALGRIND inc -silent -file "$MH_TEST_DIR/eom-align.mbox"
+  # We know the messages should be 11 and 12 in inbox
+  # Now get the bodies back out.
+  sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > 
+  sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/12" > 
+  diff -u "$MH_TEST_DIR/eom-align.mbox.body" 
+  diff -u "$FILLER" "$MH_TEST_DIR/eom-align.inbox.body2"
+  rmm 11 12
+# do_one_test_B sz
+# Do a test type B
+do_one_test_B () {
+  SZ=$1
+  makembox_B "$MH_TEST_DIR/eom-align.mbox" $STDIO_BUFSZ
+  $VALGRIND inc -silent -file "$MH_TEST_DIR/eom-align.mbox"
+  # We know the message should be 11 in the inbox
+  sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > 
+  diff -u "$MH_TEST_DIR/eom-align.mbox.body" 
+  rmm 11
+# Cover a decent range around the stdio buffer size to make sure we catch
+# any corner cases whether they relate to total message size equal to
+# buffer size or to body size equal to buffer size.
+echo "Testing inc of files with various alignments of eom marker with buffer 
+for sz in $(seq $START $FINISH); do
+  progress_update $sz $START $FINISH
+  do_one_test_A $sz
+  do_one_test_B $sz

reply via email to

[Prev in Thread] Current Thread [Next in Thread]