Microsoftから定例外のセキュリティアップデートがリリースされています。
Windows Print Spooler の脆弱性情報 (CVE-2021-34527) に対するセキュリティ更新プログラムの定例外での公開 – Microsoft Security Response Center
EOLとなっているWindows 7および現時点でアップデートが未リリースのWindows 10 version 1607、Windows Server 2012/2016については印刷スプーラ(Print Spooler)サービスを停止して無効にする(この場合印刷が一切できなくなる)か、グループポリシーで受信リモート印刷を無効にする(この場合リモートからローカルのプリンタに印刷できなくなるが、ローカルでの印刷は可能)かのいずれかの回避策を取ることを強くお勧めします。
CVE-2021-34527 - セキュリティ更新プログラム ガイド - Microsoft - Windows 印刷スプーラーのリモートでコードが実行される脆弱性
2021年7月7日
2021年7月1日
2021年6月21日
[書籍]プログラミングC# 第8版
紀伊國屋書店新宿本店でProgramming C# 8.0 (Amazon US)の翻訳である
プログラミングC# 第8版 (Amazon)/Ian Griffiths著/木下哲也訳/鈴木幸敏技術監修/オレイリージャパン/ISBN 978-4-87311-936-6/5,280円
を購入。
プログラミングC# 第8版 (Amazon)/Ian Griffiths著/木下哲也訳/鈴木幸敏技術監修/オレイリージャパン/ISBN 978-4-87311-936-6/5,280円
を購入。
2021年6月9日
2021年6月1日
Firebird 4.0
Firebird 4.0がリリースされています。ODSバージョンは13になっています。
Firebird: Firebird 4.0 is released
Firebird: Firebird 4.0.0
Firebird 4.0 Release Notes (PDF)
Firebird: Firebird 4.0 is released
Firebird: Firebird 4.0.0
Firebird 4.0 Release Notes (PDF)
2021/06開催のセミナー
- Web Seminar
- 2021/06/10 23:00-24:00(JST) Delphi Low Code Wizard Webinar
- 2021/06/25 17:00-18:00(JST) エンバカデロ・デベロッパーTV
- Live Seminar
- Community Event
2021年5月12日
2021年5月5日
マイナーリリースを区別する新しい標準条件シンボル
Delphi Master Release List · ideasawakened/DelphiKB Wiki · GitHubを見ていて気が付いたのですが、いままで標準条件シンボルの定義やCONDITIONALEXPRESSIONSではできなかった、マイナーリリース間を区別する(たとえば10.4.1と10.4.2を見分ける)ための新しい標準条件シンボルがRAD Studio/Delphi/C++Builder 10.4.2 Sydneyで導入されたようです。
RAD Studio/Delphi/C++Builder 10.4.1 SydneyまではSystem.pasに
RAD Studio/Delphi/C++Builder 10.4.1 SydneyまではSystem.pasに
const
RTLVersion = 34.00;
{$HPPEMIT '#define RTLVersionC 3400'}
とRTLVersionが定義(34.0)されていたものが、10.4.2 Sydneyではconst
RTLVersion = 34.00; RTLVersion1041 = True; RTLVersion1042 = True;
{$HPPEMIT '#define RTLVersionC 3400'}
と、RTLVersion1041/RTLVersion1042(いずれもTrue)の定義が追加されています。10.4/10.4.1ではこれらの定義が存在せず、10.5でもどうなるのかがいまのところわかっていないので使用方法も判然としないのですが、とりあえず{$IF RTLVersion = 34.0}
{$IF RTLVersion1042}
Label1.Caption := 'Delphi 10.4.2.';
{$ELSE}
Label1.Caption := 'Delphi 10.4 or 10.4.1.';
{$ENDIF}
{$ELSE}
Label1.Caption := 'Not Delphi 10.4.x.';
{$IFEND}
こんな感じになるでしょうか。
2021年5月4日
RAD Studio/Delphi 10.4.2 RTL Patch
RAD Studio/Delphi 10.4.2 SydneyのRTL Patch 1.0がリリースされています。General Patch 1.0で不足していたRSP-33117の修正が行われます。
Delphi 10.4.2 RTL Patch
Delphi 10.4.2 RTL Patchのリリース
Delphi 10.4.2 RTL Patch
Delphi 10.4.2 RTL Patchのリリース
2021年5月1日
RAD Studio/Delphi/C++Builder 10.4.2 General/Delphi Compiler Patch
RAD Studio/Delphi/C++Builder 10.4.2 SydneyのGeneral Patch 1.0およびDelphi Compiler Patch 1.0がリリースされています。General Patch 1.0はデバッグおよびC++コンパイラ/リンカの問題(RSP-33406、RSP-33117、RSP-32951、RSP-32939、RSP-32043)を、Delphi Compiler Patch 1.0はDelphiのコンパイラおよびLSPの問題(RSP-33425、RSP-33232、RSP-32768)を修正します。
RAD Studio 10.4.2 General Patch
Delphi 10.4.2 Compiler Patch
RAD Studio 10.4.2のPatchのリリース: General PatchおよびDelphi Compiler Patch (en)
2021/05/02追記: General Patch 1.0にはRSP-33117が含まれておらず、この件に関しては別途パッチが再リリースされることになるとのことです。
2021/05/04追記: RSP-33117はRTL Patch 1.0で修正されました。
RAD Studio 10.4.2 General Patch
Delphi 10.4.2 Compiler Patch
RAD Studio 10.4.2のPatchのリリース: General PatchおよびDelphi Compiler Patch (en)
2021/05/02追記: General Patch 1.0にはRSP-33117が含まれておらず、この件に関しては別途パッチが再リリースされることになるとのことです。
2021/05/04追記: RSP-33117はRTL Patch 1.0で修正されました。
2021年4月29日
[書籍]Delphiで作るAndroidスマホアプリ
Amazon(JP)で注文した
Delphiで作るAndroidスマホアプリ (Amazon JP)/山菅昇一、山菅昇太郎著/インプレスR&D/ISBN 9784844379584/2,200円
が配送されてきました。
Delphiで作るAndroidスマホアプリ (Amazon JP)/山菅昇一、山菅昇太郎著/インプレスR&D/ISBN 9784844379584/2,200円
が配送されてきました。
2021年4月16日
[書籍]改訂第4版 C++ポケットリファレンス
紀伊國屋書店新宿本店でC++ポケットリファレンス、改訂新版 C++ポケットリファレンス、改訂第3版 C++ポケットリファレンスのC++20対応改訂版の
改訂第4版 C++ポケットリファレンス (amazon)/ 高橋晶、安藤敏彦、一戸優介、楠田真矢、湯朝剛介著/技術評論社/ISBN 978-4-297-11999-7/3,278円
を購入。
改訂第4版 C++ポケットリファレンス (amazon)/ 高橋晶、安藤敏彦、一戸優介、楠田真矢、湯朝剛介著/技術評論社/ISBN 978-4-297-11999-7/3,278円
を購入。
2021年4月14日
2021年4月1日
2021年3月16日
[書籍]Object Pascal Handbook Delphi 10.4 Sydney Edition
Amazon(JP)で注文した
Object Pascal Handbook Delphi 10.4 Sydney Edition (Amazon US, Amazon JP)/Marco Cantù著/ISBN 979-8554519963/5,606JPY(printed)
が配送されてきました。2021/03/14に注文して2日目の到着でした。
Object Pascal Handbook Delphi 10.4 Sydney Edition (Amazon US, Amazon JP)/Marco Cantù著/ISBN 979-8554519963/5,606JPY(printed)
が配送されてきました。2021/03/14に注文して2日目の到着でした。
2021年3月10日
2021年3月6日
const修飾されたインタフェース型の引数としてその場で生成したインスタンスをインタフェース型にキャストしないでそのまま渡すとリークする
Dalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingをパラ見していて引っかかったのですが、タイトルを見ても何をいっているのかわからないと思うので、まずコードを。
これは、インタフェース型の引数がconst修飾されているとメソッド内部で仮引数が変更されないことが保証されているため、仮引数にコピーしたことによる参照カウントの管理を行わない最適化が行われるのに対して、前者のコードでは呼び出し元で生成したインスタンスが(インタフェース型ではなく)クラス型としてしか管理されていないため、やはり参照カウントの管理を受けずに、リークしてしまう、ということのようです。しかし後者ではas IFooとキャストしたことでIFoo型の暗黙のローカル変数が用意され、これによって参照カウントによって正常に解放されます。
メソッド内部で仮引数を別のインタフェース型の変数やフィールドにコピーすると参照カウントの管理が行われて適切に解放が行われますが、これは実装に依存しますし、また引数をconst修飾していなければ大丈夫ですが、既存の実装の変更が必要になる、ということが問題になります。
このためconst修飾されたインタフェース型の引数としてその場で生成したインスタンスを渡す場合はインタフェース型にキャストするか、あるいは
元ねたはもちろんDalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingの"13.4 In-place construction in a const parameter"。
type
IFoo = interface
procedure FooBar;
end;
TFoo = class(TInterfacedObject,IFoo)
public
procedure FooBar;
end;
TBar = class(TObject)
public
procedure Baz(const AFoo: IFoo);
end;
procedure TFoo.FooBar;
begin
// Do something.
end;
procedure TBar.Baz(const AFoo: IFoo);
begin
AFoo.FooBar;
end;
インタフェースとしてIFooと、その実装としてクラスTFooを用意し、クラスTBarにはconst修飾されたIFooを渡すBazというメソッドがあります。ここでvar
Bar: TBar;
begin
Bar := TBar.Create;
Bar.Baz(TFoo.Create);
Bar.Free;
end;
とTBar.BazにTFoo.Createで生成したインスタンスを直接渡すと、TFooはIFooとしての参照カウントの制御を受けず、リークしてしまいます。一方でvar
Bar: TBar;
begin
Bar := TBar.Create;
Bar.Baz(TFoo.Create as IFoo);
Bar.Free;
end;
とIFooにキャストしたものを渡すとリークしなくなります。これは、インタフェース型の引数がconst修飾されているとメソッド内部で仮引数が変更されないことが保証されているため、仮引数にコピーしたことによる参照カウントの管理を行わない最適化が行われるのに対して、前者のコードでは呼び出し元で生成したインスタンスが(インタフェース型ではなく)クラス型としてしか管理されていないため、やはり参照カウントの管理を受けずに、リークしてしまう、ということのようです。しかし後者ではas IFooとキャストしたことでIFoo型の暗黙のローカル変数が用意され、これによって参照カウントによって正常に解放されます。
メソッド内部で仮引数を別のインタフェース型の変数やフィールドにコピーすると参照カウントの管理が行われて適切に解放が行われますが、これは実装に依存しますし、また引数をconst修飾していなければ大丈夫ですが、既存の実装の変更が必要になる、ということが問題になります。
このためconst修飾されたインタフェース型の引数としてその場で生成したインスタンスを渡す場合はインタフェース型にキャストするか、あるいは
type
TFoo = class(TInterfacedObject,IFoo)
public
class function CreateAsIntf: IFoo;
procedure FooBar;
end;
class function TFoo.CreateAsIntf: IFoo;
begin
Result := TFoo.Create;
end;
var
Bar: TBar;
begin
Bar := TBar.Create;
Bar.Baz(TFoo.CreateAsIntf);
Bar.Free;
end;
このように生成したインスタンスをインタフェースとして返すようなメソッドを用意して、そちらを経由するか、ということになります。元ねたはもちろんDalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingの"13.4 In-place construction in a const parameter"。
2021年3月1日
2021/03開催のセミナー
- Web Seminar
- 2021/03/19 17:00-18:00(JST) エンバカデロ・デベロッパーTV「帰ってきたデベロッパーTV」
- Live Seminar
- Community Event
登録:
投稿 (Atom)