Path: csiph.com!xmission!news.glorb.com!usenet.stanford.edu!not-for-mail From: Mark Bratcher Newsgroups: gnu.smalltalk.bug Subject: DBD-PostgreSQL PGTableColumnInfo>>initializeFrom: crash scenario Date: Sun, 30 Aug 2015 16:31:08 -0400 Lines: 25 Approved: bug-gnu-smalltalk@gnu.org Message-ID: NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: usenet.stanford.edu 1440966694 31780 208.118.235.17 (30 Aug 2015 20:31:34 GMT) X-Complaints-To: action@cs.stanford.edu To: bug-gnu-smalltalk@gnu.org Envelope-to: bug-gnu-smalltalk@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=to:from:subject:message-id:date:user-agent:mime-version :content-type:content-transfer-encoding; bh=/gGFlSY6pjsGpxwxnjEZS1y2umFOUmbMtqtmcMyxCx4=; b=0+JP5EgNrUXh53jRlNRkcKmjd3Gg1b1L+A1KJ9zYu8j0r9oTUVCNPL1NbnWxIiDVW4 z89SMab4T01mIVkXXgptaiJ0UWT83ZGYXWAygl3J8XgJWYVdkm7+4pqgGqKTTqeQY7BB yiEgOl+pyAt5kkn415qowTn1+lN9BWSrWRabonXG/Rq0iTDH48WWeSifwQkG6OZnLCUA TTPIv2GZ70sKmrZEtlITZoN/8+9tT1hPGdNWt6pQNGTx2GoR4GVy8tJlpZdDqUTM921F kM3z6FcVWypAtpLeVsdo8cyT+B1dj6t5qPxjr+l2vSj2tXcv1C+QHzmuMDEt+gh+pYSm C1tA== X-Received: by 10.55.195.80 with SMTP id a77mr4293941qkj.2.1440966688076; Sun, 30 Aug 2015 13:31:28 -0700 (PDT) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c09::22e X-BeenThere: bug-gnu-smalltalk@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Bug reports for the GNU implementation of Smalltalk List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com gnu.smalltalk.bug:1 The `initializeFrom:` selector for the `PGTableColumnInfo` class doesn't check for nil values for the `prec` and `scale` values. Therefore, under some conditions, the following will crash: initializeFrom: aRow [ | prec radix scale | name := aRow atIndex: 1. type := aRow atIndex: 2. size := aRow atIndex: 3. prec := aRow atIndex: 4. radix := aRow atIndex: 5. scale := aRow atIndex: 6. nullable := (aRow atIndex: 7) = 'YES'. index := aRow atIndex: 8. radix = 2 ifTrue: [ "if radix is nil, this crashes prec := (prec / 3.32192809) ceiling."if prec is nil, this crashes" scale := (scale / 3.32192809) ceiling ]."if scale is nil, this crashes" This method needs to check wither there are actually values available at `aRow` at indices 4, 5, and 6. Other indices might also need to be checked, but I have not encountered these as faults (yet).