Knowledge Base

BUG: ESQL-C: Divisor in Parentheses May Cause AV in NSQLPREP

PSS ID Number: 158885

Article Last Modified on 12/2/2002


The information in this article applies to:


This article was previously published under Q158885
BUG #: 16003 (NT 6.50)

SYMPTOMS

NSQLPREP may experience an unhandled access violation (AV) when precompiling a C division expression in which the divisor is contained within parentheses. Additionally, the C modulus (%) operator causes the same problem.

WORKAROUND

To work around this problem, do either of the following:
  • Ensure that there is a character string variable assignment in the program, before the division expression.
  • Do not place the divisor in parentheses.

STATUS

Microsoft has confirmed this to be a problem in Microsoft Embedded SQL for C Programmer's Toolkit version 6.5. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.

MORE INFORMATION

Other operators (such as +, -, and *) do not cause an AV in NSQLPREP.

The following is a sample code fragment that will cause the ESQL-C precompiler to generate an AV:
   int main (int argc, char** argv, char** envp)
   {
      int x;
      EXEC SQL BEGIN DECLARE SECTION;
            char o[3];
      EXEC SQL END DECLARE SECTION;
      x = 1 / (1);   // causes AV
      return (0);
   } /* end program */ 
				

The following sample code fragment will not cause the precompiler to generate an AV, because there is a character string variable assignment before the division expression:
   int main (int argc, char** argv, char** envp)
   {
      int x;
      char string[] = "";  /* character string assignment */ 
      EXEC SQL BEGIN DECLARE SECTION;
            char o[3];
      EXEC SQL END DECLARE SECTION;
      x = 1 / (1);
      return (0);
   } /* end program */ 
				

Additional query words: ESQL/C ESQL-C

Keywords: kbBug kbProgramming KB158885
Technology: kbAudDeveloper kbSQLEmCPTKSearch kbSQLServSearch