RENESAS TOOL NEWS 2008年06月16日 : 080616/tn5
| M16Cシリーズ用Cコンパイラパッケージ ご使用上のお願い
--strcmp関数を使用する際の注意事項 |
M16Cシリーズ*用Cコンパイラパッケージの使用上の注意事項を連絡します。
* M16C/60、/30、/20、/10、/Tiny、およびR8C/Tinyシリーズの総称です。
1. 該当製品
M16Cシリーズ用Cコンパイラパッケージ(M3T-NC30WA)
V.3.10 Release 1 ~ V.5.44 Release 00
2. 内容
文字列関数strcmpの引数が2つともauto変数のnearポインタ(引数含む)
またはauto変数のアドレスであり、引数が指す先の文字列がNULL文字終端
まで含めて完全に同一である場合に、NULL文字終端を超えて文字列を比較
してしまうことがあります。
2.1 発生条件
以下の条件すべてに該当する場合に発生します。
(1) コンパイルオプション -O5および -OSを使用している。
(2) strcmpを使用している。
(3) (2)のstrcmpの引数が2つとも、auto変数のnearポインタ(引数含む)
またはauto変数のアドレスである。
(4) (3)の引数が指す先の文字列は、NULL文字終端まで含めて完全に同一で
ある。
2.2 発生例
------------------------------------------------------------------------
int strcmp(const char _far *s1, const char _far *s2);
int func(char* p1, char* p2)
{
return strcmp(p1, p2);
}
void xxx(void)
{
char str1[] = "abcd\0";
char str2[] = "abcd\0";
int i;
i = func(str1, str2);
}
------------------------------------------------------------------------
3. 回避策
コンパイルオプション -O5または-OSを使用しないでください。
4. 恒久対策
次バージョンで修正する予定です。