「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@256) [低] [解決]
@256■ (#711) 特殊なデータにおいて「タグ切り出し」命令がきかない - komai (2009-05-12 21:05) /中 未処理
いつも楽しく使わせていただいています
【症状】xml系データの中にCDATAの記述があり、そのセクション内に「'」を含んでいた場合、「タグ切り出し」命令が効きません
【再現方法】サンプルソース
#ここから

ボックス=『
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML lang="ja">
<HEAD>
<TITLE>テスト</TITLE>
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#000099" alink="#ff0000">
<P align="right" class="head">日本語プログラミング言語「なでしこ」 </P>
あいうえお
かきくけこ
<P ><![CDATA[I don't know(that)]]> </P>
<h1>あのね<h2>
そのね
<P align="center"><IMG src="test.gif" width="293" height="76" border="0"></P>
これね
<P class="head"><A href="http://test.nadesiko.com/">なでしこのテストです</A>><B>てすとなんです</B></P>
いやね
実はね
</BODY>
</HTML>


ボックスから「P」のタグ切り出して表示

#再現ソース、ここまで

☆「'」あるいはCDATAセクションの記述をなくすと再現しないことを確認しています。*指摘を受けるまで「CDATAタグ」と間違えて書いていました

【要望】「タグ切り出し」命令が正常に作動してくれることが望みです。
【バージョン】1.520
 OS:Vista Business
【その他】データの記述の問題でしたら勉強不足で申し訳ありません。ただ一般のサイトのデータでそういうものがあり、利用したいので、なでしこで処理できるようになると、とても嬉しく思います。

(#714) 再現 - U D (2009-05-12 19:16) /中 未処理
再現しました。

ひょっとしたら、CDATAセクションが何らかの「開始タグ」として処理されてるのかもしれませんね。
※といっても、開始・終了タグが不一致な場合でもきちんとP要素は抜き出してくれるので、もっと別な問題のような気もする・・・

また、<P><!--hoge'fuga--></P>のような<!--コメント-->内にシングルクォーテーションがある場合も発生するようです。

蛇足ですが、、、
CDATA「セクション」(タグではない)は<![CDATA[ ... ]]>と記述するので、
そもそも"<!{CDATA[I don't know(that)]]>"はvalidなCDATAセクションになってませんね。
(波括弧「{」になってますよ!)
# もっとも、この点を直してもバグは起こるので、根本的な問題ではなさそう・・・?

(#715) RE:再現 - komai (2009-05-12 19:27) /中 未処理
UD様
さっそく再現確認していただいてありがとうございました!

波括弧・・・打ち間違えておりました。早速訂正しておきます。
それから「セクション」というのですね。勉強になります。ありがとうございます!

(#716) コメント・CDATAが考慮されていない - U D (2009-05-12 22:13) /高 未処理
どうもコメント・CDATAセクションが考慮されていないようですね。
skipTagEnd()で「'」,「"」が属性の始まりと認識されて、属性が閉じるまで、
つまりHTMLの一番最後まで読みこんでしまうようです。

L.719- [ hi_unit/strunit.pas ]

      if p^ = '''' then
      begin
        Inc(p); skipToChar('''', p); // <- 「'」が見つかるまで進む
      end else


CDATAセクションをきちんとエスケープする処理を作る必要がありそうですね。
優先度を上げておきます。

(#717) RE:コメント・CDATAが考慮されていない - しらたま (2009-05-13 01:38) /高 修正中
現象確認しました。
<の後に!がある場合は、>まで読み飛ばす、という修正を行います。

(#718) 素早い対応をありがとうございます! - komai (2009-05-13 02:14) /高 修正中
>UD様
さらに詳しいバグ解析をしていただいて本当にありがとうございました。
なるほど、だからデータによっては途中だけ抜けたりということがあったのですね。

>しらたま様
修正作業に取り組んでいただけるとのこと、ありがとうございます!

楽しみに待っております♪

(#722) RE:素早い対応をありがとうございます! - しらたま (2009-05-13 22:36) /高 確認待ち
-「タグ切り出し」「階層タグ切り出し」「タグ属性取得」「タグ属性一覧取得」の各命令で、対にならない引用符('と")によって正しく結果を取得できない、もしくはフリーズする不具合を修正。(@256)(r112)

(#733) RE:RE:コメント・CDATAが考慮されていない - U D (2009-05-15 19:02) /高 未処理
> <の後に!がある場合は、>まで読み飛ばす、という修正を行います。 

それだとコメント/CDATAの中に別の">"が入っていた場合に「閉じられた」と判定されませんか?

(#738) RE:RE:RE:コメント・CDATAが考慮されていない - しらたま (2009-05-15 23:29) /高 修正中
CDATAって、>をエスケープしなくて良かったんですね…
CDATAの時は]]>が出現するまで、<!--の時は-->まで読み飛ばすように変更します

(#786) RE:RE:RE:コメント・CDATAが考慮されていない - しらたま (2009-05-21 14:00) /高 確認待ち
修正しました。(r120)

(#802) 微修正しました - クジラ飛行机 (2009-05-22 01:44) /高 確認待ち
-「タグ切り出し」「タグ削除」で「<!CDATA[..]]>」を認識しない不具合を修正。(@256)(r129)

(#814) ありがとうございました! - komai (2009-05-22 23:04) /低 解決
UD様、しらたま様、クジラ飛行机様
新しいバージョンで無事動くことを確認いたしました。
どうもありがとうございました!

(#711)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能