diff options
author | Veerapuram Varadhan <v.varadhan@gmail.com> | 2010-07-06 20:07:33 +0400 |
---|---|---|
committer | Veerapuram Varadhan <v.varadhan@gmail.com> | 2010-07-06 20:07:33 +0400 |
commit | db2fcaa9a577795248c15e46205c4eaebb4430c7 (patch) | |
tree | 59ac21a5e4232ae79bf94720cf0bfd16cbcaf5fe /mcs/class | |
parent | b1afdaba84f5f698d33db38908d9aaf036f4a440 (diff) |
backport of r159962
2010-07-06 Veerapuram Varadhan <vvaradhan@novell.com>
** Fixes #609109
* TdsComm.cs (Append[DateTime]): Handle datetime values sanely
that are less than epoch.
(Append[string]): Fix boundary checking for availability of
enough buffer
svn path=/branches/mono-2-6/mcs/; revision=159969
Diffstat (limited to 'mcs/class')
4 files changed, 36 insertions, 8 deletions
diff --git a/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/ChangeLog b/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/ChangeLog index f5034518a4d..63ddd33c7a0 100644 --- a/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/ChangeLog +++ b/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/ChangeLog @@ -1,3 +1,11 @@ +2010-07-06 Veerapuram Varadhan <vvaradhan@novell.com> + + ** Fixes #609109 + * TdsComm.cs (Append[DateTime]): Handle datetime values sanely + that are less than epoch. + (Append[string]): Fix boundary checking for availability of + enough buffer + 2010-07-03 Veerapuram Varadhan <vvaradhan@novell.com> ** Fixes #609935 diff --git a/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/TdsComm.cs b/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/TdsComm.cs index 757610daa71..84ecf7b83e4 100644 --- a/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/TdsComm.cs +++ b/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/TdsComm.cs @@ -266,13 +266,28 @@ namespace Mono.Data.Tds.Protocol { { DateTime epoch = new DateTime (1900,1,1); - TimeSpan span = t - epoch; - int days = span.Days ; - int val = 0; - + TimeSpan span = t - epoch; + int days, hours, minutes, secs; + long msecs; + int val = 0; + + days = span.Days; + hours = span.Hours; + minutes = span.Minutes; + secs = span.Seconds; + msecs = span.Milliseconds; + + if (epoch > t) { + hours = t.Hour; + minutes = t.Minute; + secs = t.Second; + msecs = t.Millisecond; + days--; + } + SendIfFull (bytes); if (bytes == 8) { - long ms = (span.Hours * 3600 + span.Minutes * 60 + span.Seconds)*1000L + (long)span.Milliseconds; + long ms = (hours * 3600 + minutes * 60 + secs)*1000L + (long)msecs; val = (int) ((ms*300)/1000); AppendInternal ((int) days); AppendInternal ((int) val); @@ -379,7 +394,7 @@ namespace Mono.Data.Tds.Protocol { int lenToWrite = s.Length * ssize; // if nextOutBufferLength points to the last buffer in outBuffer, // we would get a DivisionByZero while calculating remBufLen - if (outBufferLength - nextOutBufferIndex < 1) + if (outBufferLength - nextOutBufferIndex < ssize) SendIfFull (ssize); int remBufLen = outBufferLength - nextOutBufferIndex; diff --git a/mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog b/mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog index e298d939191..f61f1363907 100644 --- a/mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog +++ b/mcs/class/Mono.Data.Tds/Mono.Data.Tds/ChangeLog @@ -1,3 +1,8 @@ +2010-07-06 Veerapuram Varadhan <vvaradhan@novell.com> + + * TdsMetaParameter.cs (Prepare): Use the count of characters in nvarchar + param as the size, to match .NET implementation. + 2010-07-03 Veerapuram Varadhan <vvaradhan@novell.com> ** Fixes #609935 diff --git a/mcs/class/Mono.Data.Tds/Mono.Data.Tds/TdsMetaParameter.cs b/mcs/class/Mono.Data.Tds/Mono.Data.Tds/TdsMetaParameter.cs index e722106f1a6..8ed81f7a16b 100644 --- a/mcs/class/Mono.Data.Tds/Mono.Data.Tds/TdsMetaParameter.cs +++ b/mcs/class/Mono.Data.Tds/Mono.Data.Tds/TdsMetaParameter.cs @@ -246,8 +246,8 @@ namespace Mono.Data.Tds { break; case "nvarchar": case "xml": - int paramSize = GetActualSize (); - result.Append (paramSize > 0 ? (paramSize > 8000 ? "(max)" : String.Format ("({0})", paramSize)) : "(4000)"); + int paramSize = GetActualSize () / 2; + result.Append (paramSize > 0 ? (paramSize > 4000 ? "(max)" : String.Format ("({0})", paramSize)) : "(4000)"); break; case "char": case "nchar": |